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


    : g4 F& e. J9 w1 o  {6 K8 D$ m

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

: ]) H2 A. ]1 T/ \4 g
1 X0 a, m& q& P. j/ w8 M* v+ `$ M. |& d

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


- O: I5 w4 y5 r" I

绘制简单气象地图

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

1. 使用anaconda安装Cartopy库:

  • 0 C. F9 C! H1 M0 j

    3 p/ U* t% C0 h! I+ i: i/ ?

conda install Cartopy
1 e1 c. u9 g+ ~. @) ^9 s

$ P# r; M# N$ J8 e4 {
5 F2 Z& w4 ?5 W' {6 X) b
5 U, }, Q0 r6 Z

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

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

例:绘制图中图


  • 0 ^: \, Y3 ]6 A& E! O" r3 \( L
  • 7 a* A2 s; s  K/ u) [: b' D' r0 ~

  • : X7 t( r3 U+ Z0 m7 h& v
  • ) @  Y( W' W5 W$ r. D

  • 4 v. M# y$ k" E3 z1 D1 q2 r7 m4 n

  • & j0 W  T( t6 v$ d( E

  • 4 T/ N* R: q* M4 X& ~* K# r

  • & a) U" A& n! o8 ~
  • ' u6 H9 I1 N2 {' A

  • 6 J) ^3 o9 d' ]6 J0 C) D! |

  • , o6 _: q. m5 ]; I. Z" ?8 z
  • 2 o9 z' D, k& k  a
  • 1 D6 P" v+ W& {7 {

  • ( P$ u$ @3 Z8 A, }$ t- Y

  • - g% j1 B/ L9 j

  • - s5 f( X: X$ o$ E+ ]1 S

  • - ~/ u9 I1 H! H4 x2 l+ W8 p
  • " B2 ^2 J1 n' B; t, [

  • % D5 Z5 m  j1 F( v$ n7 a$ i" H

  • ! @( J7 n% f4 \: J# s2 @

  • % q$ O, H' _( X/ J5 r' I

  • ; C" J; E" L1 u; P

  • ! Q0 `" ~, Z3 W7 M

  • ' I% Y. ?) P2 |9 d7 n, i5 `
  • 6 x1 D+ C# h2 c" A
  • 6 }8 l  Y4 l7 o' A
  • 8 ^, o) v  @3 R" Y, ]

  • 9 I% o+ F5 e0 X4 L/ I$ ~" @8 z! H! }. p6 N3 K7 W0 H# _! u1 [

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()& I# c0 \  t/ ?( _( j( J; N( e

36dffb9567a70f2b9ac9b72e5828c688.png


  i" |7 K7 z! O) `! B9 U! p& K
( x) D% {# |" C$ G2 R; _! _! u. b! z9 h
9ee420172be46e4f6a610c7b8eb3628c.gif
回复

举报 使用道具

相关帖子

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