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

    ; a+ ^2 a. M5 @3 M1 ~# _

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


0 [" }; T6 U. P- M2 S2 u0 u
) Q0 T5 S6 \7 c' p" W

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

  {! S) [% L4 G* `  E: e: m

绘制简单气象地图

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

1. 使用anaconda安装Cartopy库:


  •   F0 z, ?5 f. T. t! I
    3 u3 w& U3 S; [% Z8 I$ G8 L

conda install Cartopy- y! c+ O6 g" R5 U: ~, G


5 V5 T2 v) x& F% C( n" r
2 Y4 W9 v. ]$ B# ]
" V; E, x1 Q2 w$ z& Y( B- i4 ]

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

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

例:绘制图中图


  • / U- i+ s2 i. q, O, k: |0 ?4 H
  • % f4 Y9 n' x+ A& s. u2 ^4 t3 O

  • 1 V- ]3 s$ O4 w3 ~% N1 S0 l" d
  • % V, {/ G; J9 [( z8 S
  • , u* A3 A4 }# R! F, j( |" y  i
  • ; [) ]9 V; I# S. g1 {, K

  • & T! n- @4 B: P7 a+ u
  • 7 o2 m+ b" i3 @- G: C$ V

  • 6 i4 J! ~: w# p& h
  • : s. U1 m) ]6 M, Y- I4 c+ \

  • . A3 E' d0 H' F! Y6 t' q4 {$ U
  • 4 }3 V- I: O) P" L+ b7 R+ q

  • . u" `, R- f8 X4 L: H
  • 9 S' \  ]- h9 c7 N  S8 M0 {5 C

  • 9 s$ ?* }! v) d, l  o3 D
  • 8 {5 r8 X0 o7 C

  • " m- c) v( w  E2 O' q. A0 x) ?

  • 2 A& U. p# {& G, U2 L
  • . r1 u. }; p' C! ?4 F! O0 Q
  • - v+ I: c2 \: h/ d* q9 d/ U7 e* K
  • 7 i8 j! e1 G* m+ u3 T
  • # p8 N$ W2 z* {8 c- U6 O

  • 3 o$ {) @/ B0 q# ]
  • + Z( C, y* d2 I# x  B1 j
  • $ o1 E: Y( p4 {0 }

  • 7 d& f" Y9 F) A1 F7 J5 S

  • : k5 [* j" ~$ ~' v' T
  • 5 M. o, p* ?! |7 q/ u/ c
    " f6 r! m" V9 \1 z# n

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()" G& O1 a) P2 b" X8 D) P

36dffb9567a70f2b9ac9b72e5828c688.png

1 g5 d; Z/ e* l+ \' u$ R: g9 a

- Q( `9 e6 d% V9 H" a6 z
8 B+ }0 _) j# |
9ee420172be46e4f6a610c7b8eb3628c.gif
回复

举报 使用道具

相关帖子

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