气象数据可视化主要依靠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("···") * I0 B% W4 A% l, H2 l
只要按照以上六步,基本绘图没有问题!!! 6 h! u6 `. Y3 q9 i0 S( z6 g' v
* ? c9 f+ g6 h! J7 o7 j1 y: B" M6 I
绘制简单气象数据图 - / c T1 z) } R7 ]2 Y
- V7 J- u) }$ u7 t6 D
- ! X2 E4 U: l7 Y `- X: s
2 }$ @# {5 X- {3 R# t- - r. D) V1 _6 O9 t$ Q
8 Y' u" z+ a( T7 `* }& ^) A- 8 w0 m+ x4 A% C. |5 U
- ( K5 h" j$ u; f F- @$ J
/ I$ A" u: N' j5 E$ _3 S! o
7 T$ e L0 s- K( O8 O |* O- ( o% p% `. d, [& C
9 P+ }$ z" a0 J2 U+ m- ; D, Q+ v0 j6 h. }( h* ?( Q
- ( X% x, j8 }) h. h+ |
/ `8 j; p9 X: S7 n
######1引入库包############import matplotlib.pyplot as pltimport numpy as np######2画布############fig=plt.figure(figsize=(3,3),dpi=200)######3虚拟数据########x=np.linspace(0.05,10,1000)y=np.cos(x)#####4线图命令#############plt.plot(x,y,ls="-",lw="2")#####5出图#############plt.show()########6保存图片###########fig.savefig("画布")/ N5 U6 X: [9 z2 v
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - 9 b. r- C+ E5 p2 J" _, m
" _" |$ G6 g# u4 b
( P7 ^5 N! P+ B0 O- f8 M1 B0 r$ Q
8 ?0 d: A0 o/ }9 l- " Q2 ~/ g7 u& F9 f7 H5 S4 r1 d
% o! ~9 V4 v- g0 b0 Z# |- " v9 A8 b. Q, B% [; B
- + g1 W4 N S( C7 ?# r: T7 b- g
- 5 Z" d# @# y" f* A. c" j4 y* y: a
- ! W0 v% }# |% u2 q; Z6 n
- 3 v8 V8 V- }: ?" O# g. K7 Z: |9 W
0 a2 ~, t! t) J" Y6 t
7 s5 w8 C( C" v1 d6 ?+ y# ^- ]* p1 v. U5 G& G% d; w# Q6 X
) I) b, f+ h4 r: l. J: ]+ U% u
' } N' i* [0 |3 p6 a1 z& O- 8 D g0 R0 I7 m2 E7 Z& T; F3 Y
7 ^* Y" G3 R4 T( K7 U: i
9 ~$ K# P4 y& L( t* t
! d7 W( ^. X5 d3 x0 J4 j; t$ `- + ?. M" u/ q& G+ T3 Y
# q6 S% f6 \0 v
* a6 C5 M9 }( E$ P# h% A2 j2 @' q2 _1 h
######引入库包############importmatplotlib.pyplot aspltimportnumpy asnpimportpandas aspd######虚拟数据########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######画布############fig = plt.figure(figsize=(10,15),dpi=200)######划分子区域############ax1, ax2 = fig.subplots(2, 2) #####画图#############ax1[0].plot(x, y1, ls='-', lw='2', c='k', alpha=0.5) #折线图ax1[1].bar(x, y1, ls='--', lw='2', alpha=0.5) #柱状图ax2[0].barh(x, y1, ls='-.', lw='2', alpha=0.5) #条形图ax1[0].set_title("plot")ax1[1].set_title("bar")ax2[0].set_title("barh")plt.show()4 d# H8 x( N: s2 ^9 t
* t; T8 p; P8 u- R" f # V" i* j1 E- _2 p
例:线条样式不同:
0 J% P+ E9 J* h' W: ]
2 h7 p8 l* Q6 Q3 ]) `- , i( e) P( X3 Q& J$ c
- ( Y1 |0 H) B! e( h
- 8 r3 `! |* Q% G
% H' [1 M$ A6 z/ o0 g) E6 B0 X- & t" g7 L7 _ r. v0 B
8 ^# d* v" e: X6 v- N5 |" q
& G( Y, ~2 P( j- $ C: A# ]4 C% e
; I w, M! E$ R- " P8 k6 f4 l4 L9 S
' q; h7 u8 ~0 ~# L/ ~* S1 N' J$ C- 0 ~0 w; e/ ^5 \# a, Z& y& ~
- " X$ e. c& [4 U( Z' v" b
$ W; K, _7 Z% I1 ?
1 l! J& o A/ d- Y1 ~
. u w* P. g( ]3 x7 i
% V* l! m2 c5 [3 t T/ v- l/ S; f# X6 O0 f
: n* S; O7 N5 E
! F T8 g7 M, c# o+ i. H8 i: u- Y5 o. k/ f1 J: d& o& b B' y4 o
######引入库包############import matplotlib.pyplot as pltimport numpy as npimport pandas as pd######虚拟数据########x = np.linspace(0.05,10,100)y = np.sin(x)######画布############fig = plt.figure(figsize=(10,15),dpi=200)######划分子区域############ax1, ax2 = fig.subplots(2, 2) #####线条命令#############ax1[0].plot(x, y, ls='-', lw='2', c='k', alpha=0.5) #线条为实线ax1[1].plot(x, y, ls='--', lw='2', c='k', alpha=0.5) #线条为虚线ax2[0].plot(x, y, ls='-.', lw='2', c='k', alpha=0.5) #线条为虚线ax2[1].plot(x, y, ls=':', lw='2', c='k', alpha=0.5) #线条为虚线ax1[0].set_title("ls='-'")ax1[1].set_title("ls='--")ax2[0].set_title("ls='-.'")ax2[1].set_title("ls=':'")#####出图#############plt.show()
2 e/ V) C, C4 g; l$ Y1 a ' v5 t n C, `/ M
& h8 J% q1 v7 ^8 S6 q1 o5 z0 x例:线条的透明度和颜色不同:
- , }" M) ?6 i% R; k! [1 z
- K u! S' J! Q
6 h: n8 W+ \1 {8 F2 |* E
6 C/ V, n5 e6 a* r# D1 G
3 u: U! M2 o1 J" ~1 {
' o) X" Y8 F2 I5 o" R. v
3 R. I" F5 y3 [1 ?7 I
' u# |* e' W# A8 E! y1 N
; O4 X4 f/ d" |( s
" M# q/ b* Q/ R# b& N1 V; {- 1 e9 F# @: T2 W& C
- : W7 ]! n3 `' Z6 |" D5 w }
- $ _- U+ f" c9 o
* p& F" j9 b/ n6 d! s
! I0 a8 ]; {( P. |! Z' R- / s& i8 H+ g% [, L% l1 n9 P
; ]6 }) I _& i. s; e
4 ~/ Y' M' F/ |3 n) M( m6 a3 V+ b
) R6 `# A' _0 i) L H9 R: t
1 D: _4 u' |1 i+ h- |- $ W# {2 Z$ z! B6 m, c
+ e( q' @/ B) A* E9 j
######引入库包############importmatplotlib.pyplot aspltimportnumpy asnpimportpandas aspd######虚拟数据########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######画布############fig = plt.figure(figsize=(10,15),dpi=200)######划分子区域############ax1 = fig.subplots(1, 2) #####画图#############ax1[0].plot(x, y2, ls='-', lw='2', c='k', alpha=0.5) ax1[1].plot(x, y2, ls='-', lw='2', c='b', alpha=0.1) ax1[0].set_title("alpha=0.5")ax1[1].set_title("alpha=0.1")plt.show() |