收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

[Python] 【气候软件】Python6:Cartopy和matplotlib包绘制气象图中图

[复制链接]

气象数据可视化主要依靠matplotlib做绘图,其他库包为辅助,包括数据处理的,地理信息处理的等等。

绘图主要有六步(“六部曲”)(不是绝对的方法,视具体情况使用):

  • 引入库包:import matplotlib.pyplot as plt

  • 设定画布:fig=plt.figure()

  • 导入数据:之前已有介绍导入nc文件格式数据(【气候软件】Python读取气象数据 NetCDF文件(***.nc))和导入txt文本格式数据(【气候软件】Python2:读取TXT文本格式的数据)。

  • 线图命令:plt.plot(x,y,lw=,ls=,c=,alpha=)

  • 出图:plt.show()

  • 存图:fig.savefig("···")

    8 }  E2 Z1 R" A! |7 W  E2 u

只要按照以上六步,基本绘图没有问题!!!

9 P0 i) m0 w: K
7 u/ F2 F! W2 X. a) @/ z8 x5 |

Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。


2 Z/ ^9 h. E& x+ E( e" O' \! N

绘制简单气象地图

Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。

1. 使用anaconda安装Cartopy库:


  • 0 ?$ Y/ D$ A: X! [0 e! P& C! E# x% u8 b  f& T1 G* Z

conda install Cartopy
. B3 G+ R3 y4 W& S( g; ]% I


' P( m+ K2 g8 X* D$ @
0 ?+ N! n' S& g' v/ b8 ~+ w
+ }6 |8 ?: m+ }0 O& L9 b% C$ m' I. b

2. 工作在多图形(figures)和多坐标系(axes)

MATLAB和pyplot都有当前图形(figure)和当前坐标系(axes)的概念。所有的绘图命令都是应用于当前坐标系的。gca()和gcf()(get current axes/figures)分别获取当前axes和figures的对象。通常,你不用担心这些,因为他们都在幕后被保存了,下面是一个例子,创建了两个子绘图区域(subplot):

例:绘制图中图


  • . F% s. Q' ]( U0 s7 D* H
  •   k, I, u0 y4 S& L* `9 y

  • $ L5 t& |0 Z0 u9 e

  • 6 b, n* U- U. A+ m7 y+ {- L5 a0 m) ?6 X
  • . z3 t7 N1 v, J' p8 e' J6 V  ]* D
  • 9 K! n0 O/ A! R) x$ j

  • 4 E' t$ i4 ~! G/ x: M

  • $ x2 J, N% N/ j

  • 2 f" m% m; M% x4 {  q. R' @

  • ) k- R0 @8 p! N* A8 v8 [6 G

  • % D8 {* H& c6 a! ~+ b( n

  • 5 t8 t5 i% P5 e( L$ H

  • * ?' f& z8 I& X: C1 i+ v

  • 9 g2 h: D/ a' R1 T- C, t

  • 7 v6 R4 ]5 r2 O9 t5 W" y

  • 1 t6 Z# h  d1 N6 q2 L& Q# J
  • + G& |5 m! N# u- I
  • ; N' {* \" m  m

  • 7 Y9 X4 O1 r& T4 T2 N- F& q  `
  • " P4 ^' A" P5 }8 I

  • ) V' U% y" F$ R' J& f! c( M% f8 ^
  • $ ~7 z! y/ I6 S- L1 W
  • 0 {" b' Y) c' t
  • 3 n0 d( e# S, w# [" Z

  • ) |. |9 W' |  `# b) |) H! s

  • 1 f! }! p' W! Y# j9 ?$ A) X/ [
  • % e% l+ N8 i3 P) d! S0 e1 i% W

  • / H- n0 D" v; U/ N  ~7 \/ r4 e4 x0 Z! W" z7 `0 U1 Y9 F

importnumpy asnpimportmatplotlib.pyplot aspltimportpandas aspd#新建figurefig = plt.figure()  #默认的画布大小#读取某地1979-2019年年平均气温数据共40年data = pd.read_csv("annual tem.txt", skiprows=1, sep='\s+', header=None, names=['year', 'sta1', 'sta2'])print(data)x = data.yeary1 = data.sta1y2 = data.sta2#新建区域ax1#figure的百分比,从figure 10%的位置开始绘制, 宽高是figure的80%left, bottom, width, height = 0.1, 0.1, 0.8, 0.8#获得绘制的句柄ax1 = fig.add_axes([left, bottom, width, height])ax1.plot(x, y1, 'r')ax1.set_title('station1 annual mean temperature')#新增区域ax2,嵌套在ax1内,看一看图中图是什么样,这就是与subplot的区别left, bottom, width, height = 0.62, 0.15, 0.25, 0.25#获得绘制的句柄ax2 = fig.add_axes([left, bottom, width, height])ax2.plot(x, y2, 'b')ax2.set_title('station2 annual mean temperature')plt.show()
* V' W4 p  R# S! D$ m$ r9 O

36dffb9567a70f2b9ac9b72e5828c688.png


: p' w% a6 b) O% U7 }
8 D: h9 H; ~7 d8 |7 F/ v, a$ T* s  k- z4 S9 S3 L
9ee420172be46e4f6a610c7b8eb3628c.gif
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
有风
活跃在2022-10-29
快速回复 返回顶部 返回列表