|
气象数据可视化主要依靠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("···") ! u. g$ ^3 e) [0 h1 g6 J$ D, g% }6 T
只要按照以上六步,基本绘图没有问题!!! 3 Y! s: M! O1 q( f; D* C
; y" i7 w& G" V: }! z5 s# Y
绘制简单气象数据图 - 5 |3 _0 M- l# ]- C c& v! r
- * S! @1 n; }9 K' x: K; q3 F& z: P
- & _ k$ J. Q+ X( m
g+ A9 d1 k; |, E! t1 t& A- ]7 Z
0 W7 p# C" A2 Q! J" b
( ~% o2 x& h) e+ o5 n
" I" ^9 J* c. K* l/ f, v- 7 ? l; } ]0 S9 e D' G$ j
- / b# p" D% r1 h- R' V
d( [' |" f; @( `3 A4 j7 ^* d
5 T! S' C3 r- r" V0 C
' F/ @2 h9 c' E2 n' c; C
* C7 O+ e: N+ C1 k' o# V" ], J1 ]- 7 X" c; j$ {! f* d, O0 l
5 C, A- [" c; ~ y
######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("画布")+ Z4 t" L4 s6 c& k; V: f6 I
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - # `' u2 f% d8 N: D5 R
- I/ G- Y7 q! j8 ]
+ L) S p( g D- u- 5 H1 Z3 M# t" A* B5 U) i
/ v' e- `( m3 }& D) m; |4 W- " `# o! |5 q3 N+ n8 F
- 6 i! B3 V1 }. P/ S |/ `# W
: w w% ?! U% S
7 l$ ?3 M0 M2 g9 ?# k: j
- {& M- M6 W& ~" ]) A9 l, }- + E. x3 K, h& g; [7 u; t
- ! Z$ {' N3 g; R4 z1 T( B, N
- : _8 l, J% ~1 e9 Z
- m- Q% c& ~+ V6 F! m d* Q8 [
, i4 I3 N' u; X* u: R- + J# G( e1 ~1 M
- 6 ^( N2 h( u% ?: N) {
- 3 @. y: t0 t( p/ _% j3 V
; L3 r4 }, j: D. H$ D2 Z- # T0 ~! [- ]" P" p! `
- 8 ]) u- t+ m, E! W9 \, c
0 ~+ X$ p" O# L7 P! W. R$ U0 W- ( V' w; q1 ]7 i) o$ Z/ x. K7 v
$ M1 l4 R0 l' T+ f4 J$ 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, 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()1 }8 t- M- _; w& G3 Q5 Z
" @9 z; a% Z% }. T% C% z7 _& W 8 u% F+ `( ^) G2 I
例:线条样式不同:
# o1 D% K# z7 H. y- 6 e( Q% P/ c/ n& K- i3 o* l9 N
- - X: {4 |- l, J& o1 ~
- 0 f) I8 z3 p) l, z; _8 {
- 5 M* N a( ^% V- F5 B* }) [
" y. s# b9 m( ?
( @2 Q" v( @5 |' u8 {) E# C- 9 a1 ]& k# c% t J
- ! w- d# b7 A' {& b
- / y- D- }: C/ ~- k
+ a/ J, X: L1 `; Z; M
; R5 L4 K) u {7 R; Y J D
% Y- @( y/ x0 C6 r- U1 ]2 |/ K# R
: B2 \8 w" y! Y. c! z3 J
/ b# m& ^4 ?4 a0 g0 ]- 8 J- w! K5 S# x4 c# u; X& G
- 5 f( e2 X% X- `4 n
: G0 a) c" \; y& ~; f( c/ ?- 9 g) g; V' Y! H1 s; w
! M5 {" N7 j; b8 c/ n- . m& }/ Z; W m. X" O" i
- * M5 Y5 V; r- \8 I+ d% |
3 B. }( U8 C9 _7 h( }
######引入库包############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()
0 L$ x7 D5 F) r5 M8 A
2 q: v; c1 O6 ~8 d0 l8 ~, u
: B3 d- L6 s7 B! v+ f: Y例:线条的透明度和颜色不同:
9 Z: r% b/ Q9 A& L9 T- 4 w. N' K* N, u" A/ X
5 U/ `; L' Y: j
' L4 a V$ \ ^3 p6 Z1 I- 5 O2 ]- P% U( [7 F% c
- 6 e. H. [- X! E) S6 Y% X6 x2 x
9 u, b8 x% q1 K8 f* ?) [
. G. A0 O! ]5 N3 T& R/ U- 6 X- S0 D7 X+ m; }; ~
- 9 F5 T# q P1 i* O2 p8 ^4 L
5 D. r% T( X" Y
8 ?1 m A$ t5 O2 O t% K
3 r. X+ I6 Q& h) l' d4 [5 R
8 I2 R% x- t6 c# d1 }& I( h- ' a. C) r% C2 O' c; T- u/ X
$ m/ J- T6 E+ W1 T9 }
: `: V0 M' [, F! L
* R" j% L& y) Q$ M( V$ c
: K) q6 ?0 g% Q' ^- 8 S) g; a* J; r5 P
! p0 a- I( [4 u9 V9 \- |, }9 `/ N3 y) R
######引入库包############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() |