收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流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("···")

    0 k! e! j) r9 L6 U1 s

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


# V% z8 n% k* A4 r" C% `
  Q* K3 _* }5 l/ W/ P3 y) o

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


) j9 s4 g9 y) k, N

绘制简单气象地图

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

1. 使用anaconda安装Cartopy库:

  • + I/ l8 @6 o2 z% d' d

    $ f: N, N0 A- f% q$ l/ `+ c( u- \: m

conda install Cartopy" f3 }, q. z/ ^$ \


2 u* K7 R& x1 y) B& s# L
7 |" @; h1 Z, `3 z0 o
  o) D7 ^( F8 |2 ~; L

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

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

例:绘制图中图


  • ! _" K9 |$ G( B* W0 D& \  A, b! y
  • ) `! v% r/ G  k' k, o! }6 m

  • , I) `2 a4 c1 W
  • ) Q9 t0 ^( y: b  _+ }/ ^
  •   l9 b/ P  o* P
  • 5 b6 A; T* L6 N8 J! C. w3 v

  • 0 v( P+ s6 k/ D* v/ Z7 n) M8 |" I5 R
  • 1 `8 T" P" ?& Q& G; I" q  H
  • ; l% _- Q2 Q8 }' K& }

  • + Y# Z) M8 q4 ]* T* n
  • & H+ ]( S8 Q5 U0 b

  • : k; Z% S& Z, J. ^& E$ w" l! v

  • 1 \) G- j8 U0 Z# |% t% L

  • ; F0 L: O* |5 T2 f  ]  }
  • ' L+ K+ b9 ~' H' ]3 F8 B

  • - z  C; Q$ y/ G0 M

  • ) a( `; _% O8 z$ }
  • - D: k9 c$ M: E' H. N1 s
  • 4 T/ _: @6 R/ V
  • 7 K( u0 X8 g& t

  • - {9 O/ _' @  `$ M8 e0 G

  • 0 H+ C0 {  k4 j. F2 U
  • ; y& ~2 c4 N8 \+ \

  • 9 C+ C$ F9 v8 s* G# @

  • 8 r; D* b& ~" M" \

  • # V/ j! [1 B, R' n$ F
  • 4 ~0 I* }) H: v- K" W  ~
  • " f6 F% H# f  p6 B/ J) Q

    , g# ]! ~5 S3 [# X3 M  f' E

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()
, W7 B$ c/ v, o9 ?/ e0 k% ~$ M

36dffb9567a70f2b9ac9b72e5828c688.png


* t: e: y* a+ E3 D8 E* e7 E/ [9 A0 v1 }

1 X6 h) S1 {! u5 ^/ g3 W
9ee420172be46e4f6a610c7b8eb3628c.gif
回复

举报 使用道具

相关帖子

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