|
气象数据可视化主要依靠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
( b- S/ }& e7 `
& }9 Z2 B) v! |! \
2 Z9 [, g( i& i+ v8 o
|