|
气象数据可视化主要依靠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("···") " u9 Q6 ~6 e% X5 E
只要按照以上六步,基本绘图没有问题!!!
& h; o2 z" Y+ x, O" v: A5 c6 [6 `1 w# e' l
绘制简单气象数据图 - * D$ D2 ^- \" V0 O8 d; r
: V' v0 o8 |. _1 O' {; z
- M- A+ @3 E" f g- ; m) \( _& m) p8 {5 V$ P: m
- # Y* V& {; D7 x( Z4 E
- . L! P' ]' _5 c2 b' \$ i
v c ~/ z- M# V- 4 n) M- }) s5 F8 r
+ {' K+ S0 x- N0 H* B4 R" j
5 `! w+ l9 ]' ]/ _
8 p4 H% j1 i7 _" i6 _1 ?- ) e9 ~; y, [# k- \
- 3 \+ S4 F7 X) Y
* C% f9 Q0 l; b5 e9 H7 [
9 A( p" m5 e5 w& n) {+ D$ u4 P( t
######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("画布")
, o# F* d1 G! X3 H L6 b- F3 S
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - $ Q0 z. u' @# E) e6 }. D3 `
& x3 P! M# H8 r& Z( y
, P9 j9 u ^, Z8 q- * C1 G& S/ x ^/ k* K
- 9 G% z# D& Q' D0 \+ {9 U: L" }. x0 D
0 Q5 L; S9 @3 ~) G
7 T8 l, j4 x# [/ r! r' O- 3 U. O" K1 F8 @$ J( N" ]
- ! ^, }1 G$ ^% w: v, v
- + o P( u7 m( S/ D
4 ]0 w# G2 M) v, F- / m. `: }" J1 E6 R, t
- : m! w! i' A2 h- I' Z! a
9 u7 m/ `1 m& Q# P& I8 d
( n7 k4 R) e* P; ^1 _! n- , Y$ h) n# Y0 W; G4 d5 e
- : X: V* Q8 e- T# q
- , x' ~; ~1 C$ N/ x% j6 h/ i$ V% d
- * |, u2 p0 L0 T8 {5 U7 {
. [; [% a. t' R4 g$ M; B1 e
6 n0 M4 c6 g- E) K7 a# G+ R* ?0 E- / F; e: Q; k& ]8 \$ W8 F
( I; B3 X$ s3 V F5 r5 n' a( u/ X* W- L
######引入库包############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()
! h3 Z8 u/ i0 \7 O . a* P/ f$ D2 ` N9 O
* N( E0 q0 W1 A/ }. O! Y
例:线条样式不同:
- ; S/ ^" h4 p: s* J1 K) K
- + P! y3 V/ o8 C3 X* k: {/ z6 `
! ?! z& ~4 M, c. h" `- ( O0 A/ A' T) U4 h: a
/ g* l# N( x' w# c- 9 q3 E& m2 y+ ], O7 e
# {1 ]3 k9 K$ [, `3 N
2 x( q1 I5 W/ a4 R y: x: e2 V8 o- * h0 b: y' {6 b
- + r- l7 N2 D5 p5 h& S% z( l: ^( k8 r
* _* o. u3 u) a2 ^4 Q7 p1 \- * _8 ^6 d9 l) Q' z. `2 _
' t- {% ~' X/ I9 X% N
9 O. m/ L/ b) S8 o: J; H- / _3 y& S" R5 ]* k# M
- 6 u( `, J( G) S1 W( E
- , J! x$ x! N5 h" O9 T1 O3 W
6 `" A1 W0 d3 y: h3 i- 2 _9 i; D/ j: b
% m& N% L8 H0 w e- ; h& H+ K! T+ x
' J. p1 c5 ^ G6 I+ q, x
5 c) B+ R* a' ^ ~5 Q( x8 E2 {
######引入库包############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()- s1 Y% g4 P5 J: h% o
; ^3 x4 G; O# a8 i; {
& E( l' j1 @! s例:线条的透明度和颜色不同:
9 y8 L3 } p/ r9 Z3 k4 h6 t
3 _2 u' v6 c7 f4 g' E% d4 M& C
$ Q( @- ?# Y/ w! U1 G- 8 t; `: ~1 l9 d# B" z3 n* \! q
- . m& e/ v7 Q" g
$ ~6 s3 k2 m4 L& ~* i& U7 X
# I: Z( g: B2 a9 f, y- . A0 k& r& l. O, q
- 0 E9 M# J. _7 ^5 m
' m6 [, _- X' Z$ e! H
" j9 t G0 |* B) e( E- ; E6 x7 E& w8 z: W+ {
/ P! E/ D( z4 U/ c, g8 x( ]) w- 2 L. m! O8 r% }! N" z/ V
4 `" v7 m7 b h% E& P8 ]6 W" q
" h: Z N. G" u$ j6 }
6 h' u1 s; W0 H3 m3 f- & G; ]. w& a: W! W. r( J
8 }; J- H/ [ n* ?
7 V. ~( @0 g) q/ b6 X- 5 E/ ^$ k8 w+ p9 g; R
+ T7 i8 s! P* R$ Z% X6 ]) W- T
######引入库包############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() |