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


    4 a- |: H3 R* s, L' \( K1 `

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


: p1 _. @6 E! j! ?# c+ X/ |; F; J: {0 P, ^$ ^

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


+ x1 M3 P! @- a8 C) w8 b

绘制简单气象地图

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

1. 使用anaconda安装Cartopy库:

  •   `' @9 C( a) b

    & n( Y( U7 ?' x9 H7 [$ l

conda install Cartopy( G( Y- ]" I7 q2 B

4 o4 l, T3 g; i1 Z4 v
1 M" T. q1 f0 g( \
1 K* ]" Q; R( X+ F0 t4 _

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

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

例:绘制图中图

  • 1 J: N0 w- [8 ]& m( d  [6 h6 P

  • - S( f1 Y1 G3 T
  • 1 ?) D! B; D) x% [

  •   N5 i* P3 r0 O' Y$ c( ~
  • - q" d$ f: S/ q. h* a% h& L
  • ' W1 F; y- x9 ]. x6 s# |

  • $ W( U% o1 a5 [  o
  • : m! M9 f$ h2 D

  • / T, g9 V' V, f6 `* ~
  • 0 `, s% {; ]* L6 o4 y

  • ! w% ]: {) ?. L8 L# j* v
  • ' ]# w& r! I. X* W+ |  U

  • ; F  ]0 M8 F! e, ]% p

  • 9 }) Z0 l! K1 @; x5 ]1 ?8 l
  • 5 i3 J" k; k" x6 t+ B
  • 8 c$ w$ Z, T, W' C% u0 N5 T

  • % O- j8 n8 @+ Z
  • ' K+ [. |3 E4 T

  • & u$ D6 p, |$ s. v( m
  • : Y/ K! U* }5 C7 Q; O" j

  • & b" ?% m- J; u: _1 i

  • / l& \9 d+ x5 d
  • 5 L/ L1 h5 N$ I! F
  • % A$ r% p5 T% @1 R) U
  • : h! E  Z. E  I2 c9 `5 M2 E
  •   J; X; A. O& z- M) H) n5 N! s
  • . Z  |5 O* X$ `. `3 y) }7 J+ x
  •   f& [3 ~) a& M2 n1 s9 e% b+ q
    1 k7 {+ v2 s! O; E+ X

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/ _, f; o4 E$ h7 U

36dffb9567a70f2b9ac9b72e5828c688.png

( b- S/ }& e7 `
& }9 Z2 B) v! |! \
2 Z9 [, g( i& i+ v8 o
9ee420172be46e4f6a610c7b8eb3628c.gif
回复

举报 使用道具

相关帖子

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