|
气象数据可视化主要依靠matplotlib做绘图,其他库包为辅助,包括数据处理的,地理信息处理的等等。 / M+ a+ p# n8 @, t6 x! V1 s! J$ N: M, t
绘图主要有六步(“六部曲”)(不是绝对的方法,视具体情况使用): 引入库包: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("···") 9 J9 ?2 r5 z% ^( c: W$ i$ E
只要按照以上六步,基本绘图没有问题!!!
/ S* O& O: c1 \6 ^4 p: o绘制面积图和填色图
(有的时候需要画这种交差的填充图,能直观地表达差值的变化和含义。)
下面直接上代码(关于代码的解释已在注释中详细说明,应该能理解): - + T' T& x: I) ?" d( ~3 X; Y& |
7 z% L0 R$ S! V: s% M- o( a; o- $ Y7 z1 y8 v" w2 e/ f; u
- * y( R$ M: D$ t+ Y9 _- F
- ' r! B4 Z+ C9 f$ O0 E
3 B2 Q4 Z# `9 ` q0 W- ) `# U5 z9 G3 c7 h# X0 k0 l" k5 v% e
- 2 P. S- N5 a# {9 {9 u# |5 H9 [0 Q
- $ s( V' o- w7 `# `. a2 Z
- & W/ T8 b, [# [, ?- G5 m. e
* x" c, l3 ?/ F8 l' M" C0 k) t
* V# q3 l+ m: T: l
. L% x3 E; g B& M- G- ) j6 l- W9 f# t( h( z& y1 t8 {
3 ]8 ^( g" K7 `5 a
( ^0 h: `( g7 B3 B' {4 t+ t- R
* d) P% ^; \# O9 \7 d+ p4 g& O- " }6 ?# n' n2 j5 r7 o
- ' g7 j8 t6 V$ \- P% H& Z6 H. I
8 w! O( a7 D5 o# p% R! _
! a( A* k+ y7 N3 T, I2 r0 u/ R
0 |; R2 y+ b+ Q; {6 S! |1 \- : |. R( J8 N& U( f5 w( V
" i4 O, f! |( E/ q/ @1 G- F- _# [: c
1 d& _$ c; L2 o2 w* u% |- ( R6 c) {1 ? h
- ; X2 N U1 l6 C1 q+ C, w9 f) ]3 F1 A
- 0 J# X' @& u; S
- 1 ?8 [( ^2 ~* \5 i1 w; P9 T
/ Z o8 c' w. r# y+ e( u8 A
9 {5 p! X+ W2 W$ t7 ~: {- 8 P2 F4 A7 \2 Q% V
3 _3 D' c" Z2 w# S9 [3 ?0 r
8 p1 R# E, k: O
5 k+ [/ m, U+ ?- ( z( l& C4 F0 ] A; K
- $ ?1 D, p9 | \1 S9 Z- ?
- - F, s) L/ y8 H! ?: ~6 e
- ; B# B' r/ j' S
- + Y/ j8 S* W8 B: m8 Q$ Z; @
, K$ @0 y$ f6 {
5 j' w2 y4 j/ w& [7 \$ W6 Q- ( R E6 Y* h4 N) g
- , z0 K: c8 c2 f
, c3 s& C! Q/ d5 B) J* L
#引库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()
: v+ }! p: r- g5 `# i |