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


    " S+ U0 P& `6 k# u/ W. s/ n! ^

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


( o- E! J, n0 I1 \" U
+ F6 N. d8 {5 b! q. z

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


, ?. S1 T6 Y4 h# T3 Z

绘制简单气象地图

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

1. 使用anaconda安装Cartopy库:


  • 5 A9 h' j1 U' J( E0 r- \$ k. O3 H2 L

conda install Cartopy
7 @1 A+ ^/ v! p3 ]- u


1 w7 a% X9 I( o4 A+ A7 n5 ]: w3 `* v2 ]/ \; z0 p
  U2 `& y- R/ X- E

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

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

例:绘制图中图

  • & P* I  o% C/ \  ]( U

  • 0 `0 l$ i. \. f1 [

  • 3 Z. k# }- u" z+ m( h$ ^4 A

  • 5 Y8 L! T! G* u0 _4 ?: b
  • % `& V, M) |0 M1 d& S9 e& c2 @: h4 p
  • ' `4 J! l& D' N: Y7 i9 z
  • / a8 |1 }# x: Y7 J+ R

  • 5 L! m5 g) H6 H+ K; v$ N" F# Q
  • * \% t3 B: B9 g5 }" m
  • ! w5 ^) |! a3 D; ?! @) i) ~8 @! L
  • 9 L3 w& q0 o  T5 @
  • 1 d7 v( Q- [( n
  • , s6 p2 ~- k! n1 t& j. |
  • * X5 B5 o+ o# f! ]9 O9 m5 L

  • : e5 k7 c0 C: Z, R! C, L% T

  • , P1 Z% K6 S1 V& H
  • ( }& q2 b' o; z$ {& T

  • 1 A6 P7 D+ q" x; p7 g7 m; f

  • - _- h6 T* G& n# E9 U

  • , W% P; I: p( |/ z3 t" ^
  • . L5 @* h" U% G: `1 F
  • 2 B. X! }6 v9 Z( E0 _. v
  • 6 ?1 N2 ~! @6 C% [2 e5 X
  • 5 I$ [4 Z3 `8 W3 q6 G* J) o
  • 6 s% }, q# S& L% L6 a' r

  • 6 Y1 C. t& x3 f) C* y% m

  • 5 u: ?! L2 O0 n/ O+ |

  • : o$ r6 U4 x) i& n- ~1 u- w3 l8 }+ \/ H  s7 E/ F1 Q+ z

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()5 m$ D: J" V  A8 E, [" M0 D3 ^/ o. x

36dffb9567a70f2b9ac9b72e5828c688.png


) \* a- U% O3 u4 y' L% {3 ~8 i
# y7 r" g+ z9 z1 U8 Y# }; L# }7 N9 S6 g
9ee420172be46e4f6a610c7b8eb3628c.gif
回复

举报 使用道具

相关帖子

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