|
气象数据可视化主要依靠matplotlib做绘图,其他库包为辅助,包括数据处理的,地理信息处理的等等。 ( [+ ^ F# T; G' B: j0 V' F
绘图主要有六步(“六部曲”)(不是绝对的方法,视具体情况使用): 引入库包: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("···") . V9 s3 G7 t: f4 I
只要按照以上六步,基本绘图没有问题!!! 3 h6 x( z% u D: F+ M
绘制面积图和填色图
(有的时候需要画这种交差的填充图,能直观地表达差值的变化和含义。)
下面直接上代码(关于代码的解释已在注释中详细说明,应该能理解): - 8 ]- P3 Y$ X2 l a4 ~! v f
- ( p) `4 ~& A/ r% ]
- 7 v* F! V# ]6 k
- ( K% H" F; d" s' ~$ a$ c% p+ C- _- i- Q
+ k* O4 O% J) E5 x
( J g% n9 _/ Z9 H% r
/ W$ v# \8 R# K- m T9 H6 o+ V, X
4 z8 I' l0 I% V. J4 \- 4 S5 ?0 R/ K; Z
- 8 e6 d' | l' L2 }" |" |
# p! J( h; M$ v0 a K
6 {+ j8 D) v, q$ |, F
' v$ S5 C8 n7 T Z, F, _- 1 E) |! C' L9 l* ]
9 `" O" X/ d! q, d9 w1 y! i- 7 G( T8 S$ G5 N0 O+ m; a# W
" K( x, V7 A. O+ o: F" L- 9 m7 Q4 o+ A$ i4 F0 ?$ z
- ' I& K, Q! j# {& @5 y
- " c8 r6 d8 c* N. h/ p5 m" U" `$ ^
' ]8 l, ^2 H8 M' y! g& H
9 w! Y( _ S; ~( r5 I5 Q+ e
+ W5 N/ q, L9 s0 @. r
& }7 L0 C: U/ c3 g: |* n
7 H) j" Y2 D* R) J( B- & n% ?" T! @! l, C
- " E) w1 J1 N" s6 I
, |* x8 j5 a5 H* {2 H2 F3 K
! u0 }3 m3 ]% F- 8 u5 T _: X J- p' w* z# G$ H
8 I6 P7 c* ^+ \: R s% `- , ?" V, w: B; i/ O/ }
- % L# V+ v$ ]+ u' x; ?, I3 ^
- 4 B+ o- S$ N& ~$ \; {1 M
- : m9 h( l! A& K3 i9 A
8 Z1 J: I, E6 u, x1 j7 g6 h S- * G, u$ V, z5 ?7 t- U# |
- ( q7 c8 A+ ^. X
- + z1 V9 e7 j+ M# ?
4 _0 ?# l+ P5 I4 t5 i* ~, j2 v2 @- & W# [' l( P: _) V/ Q! F4 u$ j
- $ H0 p( z( L# e
- / f$ o6 y$ z8 s
) @, m! k- O( i7 ]
n0 o c. `% C
#引库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()
' C& G8 ?0 c7 N8 P9 h0 r4 u% z. u9 o |