|
气象数据可视化主要依靠matplotlib做绘图,其他库包为辅助,包括数据处理的,地理信息处理的等等。
+ f9 F# E5 P- z# U. I, i绘图主要有六步(“六部曲”)(不是绝对的方法,视具体情况使用): 引入库包: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("···") - |' |: G% C2 J9 \7 M
只要按照以上六步,基本绘图没有问题!!!
* V: K- f& }0 h' h: n1 r绘制面积图和填色图
(有的时候需要画这种交差的填充图,能直观地表达差值的变化和含义。)
下面直接上代码(关于代码的解释已在注释中详细说明,应该能理解):
, P, K, W* A7 y' `
1 c/ p- w* \9 ~7 W' [
$ e# U& E2 |0 N+ J
0 ? {) c" L: @& V
7 c" }/ C) i2 e. d y# v( \& E" v- 7 l7 X: `! C6 ?2 k# D( y
- ' d7 u0 V* |6 P$ G; F# o
7 l) U% j, v* m- S+ J, W
& J/ f1 j; P: g/ b8 ^7 q- ) S6 R9 {' C3 N- d
- 7 J5 A3 A! I9 O, L$ V# X
- : ` P* c8 T, ^+ g9 |. G5 m/ J1 w$ }
- 9 ^: S7 c! O. t4 } R; r4 L
- ; u( d: [" B" @9 A' C( x
, v; e' n0 d8 S6 o! C6 n% u- C
% {; ^! O' ^3 e8 H, f1 X
6 R! Q' T7 ~; [- S
7 B( W$ }/ w) }1 O: a
P4 ^5 f# {9 _7 ?, {6 P/ K) n$ p( a
6 d1 C* ^/ T' {% Z- " m& @5 |4 \ {) }* `& q
- 1 E: p9 h# g4 d$ J# p4 f$ @: L6 S( G
' W& t- y: }; H9 a+ S4 k- c3 u
l. J) R2 F! j' P9 Y& i/ { L- |- 1 ?6 P, o4 k$ k! Z: x
6 d8 z, }, L- L& p8 l, D
6 U: z# o' i6 @/ d' Z
4 `; `8 B0 n# X% c1 V: [: v7 p
5 u5 w$ k N+ A8 i/ y. }- O$ H5 m2 F( B+ J3 H, j
+ ?0 O' W4 M) `0 J0 r- 4 m5 J& H1 \6 E: i/ k9 ~
- - q3 Q, w0 I5 n, O
- " \! C8 k: X9 [6 }2 A' g/ E
" q& J& Z# w& l6 @6 |& o- , O; J1 \4 G( X3 g+ i
- 9 K8 _6 | n2 q8 \* c" @; ?" c
. j9 G W4 A/ u+ {
' r2 H: e" o' O2 @
5 J/ |; N& ~! O' g9 R& n- W6 y* A( P6 m$ [1 N
) j% h6 a- r2 _3 F$ |' y) R- / R$ A7 B& k y: _( }4 h1 u# u: K
- - L* y( ^3 ?5 f- R. C$ T, e
: {: _- B! e$ S' p7 }, i; a
#引库importnumpy asnpimportmatplotlib.pyplot aspltimportpandas aspd#中文及负号处理plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'plt.rcParams['axes.unicode_minus'] = False#画布fig = plt.figure(figsize=(15,6), dpi=200)ax1, ax2 = fig.subplots(1, 2)#数据x = np.arange(0.0, 2, 0.01)y1 = np.sin(2*np.pi*x)y2 = 1.2*np.sin(4*np.pi*x)#绘图#子区域1绘制限定区域填充图labels = ["Fibonacci ", "Evens"] ax1.plot(x, y1, ls='-', lw='2', c='k', label='$y1$')ax1.plot(x, y2, ls='--', lw='2', c='r', label='$y2$')ax1.legend(loc='upper right', fontsize=10) #图例位置#ax1.set_xticks([]) #取消横轴刻度#ax1.set_yticks([]) #取消纵轴刻度ax1.set_title('fill between where') #图标题ax1.set_xlabel('x') #横坐标标题ax1.set_ylabel('y') #纵坐标标题#填充图还支持限定条件下的区域填充ax1.fill_between(x,y1=y1,y2=y2, where=(y1>=y2), color='skyblue') #对y1>=y2的区域填色ax1.fill_between(x,y1=y1,y2=y2, where=(y2>=y1), color='yellow') #对y2>=y1的区域填色#添加标注。xy:标注箭头想要指示的点,xytext:描述信息的坐标ax1.annotate('y1>y2', xy=(0.3, 0), xytext=(0, -0.5), arrowprops=dict(facecolor='black', shrink=0.01))ax1.annotate('y2>y1', xy=(1.7, 0), xytext=(1.8, 0.5), arrowprops=dict(facecolor='black', shrink=0.01))#子区域2绘制堆积面积图ax2.stackplot(x, y1, labels=labels, color='yellow') #堆积面积图ax2.set_title('area picture') #图标题ax2.set_xlabel('x') #横坐标标题ax2.set_ylabel('y') #纵坐标标题#出图plt.show()
8 I* ]8 k7 N! d6 X& U$ L3 G0 _ |