|
气象数据可视化主要依靠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("···")
$ F/ i4 o) @: ]# K
只要按照以上六步,基本绘图没有问题!!! * A- J* r0 c/ x# F7 |
; L. Z2 S3 S5 i8 s) @绘制简单气象数据图 - ! t, Z( F! a! r/ y7 B1 I& i% x# C2 u
) ?, R+ u% W# t2 g# J* n- 8 i1 W! S6 w4 a
- 6 z/ K7 Y! `- ^ K% [* `! w: [
- : q& |; l) C. \( B b* W6 I1 T
/ o5 O+ l2 r& a- 4 X& p" G- t5 p
) T k& P! P; {0 \. W( t- 0 P6 n/ q4 `/ }+ G1 `; I3 Q
; L! u9 O- g, i$ H4 O! w
6 x& U6 E/ B% t W* u
- H% c: h8 j+ V7 P1 i/ Z) G
" g2 P2 j& k. s4 e) U0 E4 L: D- ; {( F( x- A# i" j, R( P$ b% z9 ]/ l
# |3 Z9 U, I2 [- u+ z: w) 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("画布")
, M& S2 t$ t" V2 ~
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - / b& F& y# M7 E& Z" C8 h5 F7 K
( W8 i e% A% R5 W" o: m* ^
; a4 r6 X$ s* c) i- ( c6 l8 G" {$ L: S9 _1 z
! t7 U( |! r+ h# a. d- ' o) M' ]7 K- b; @" G' p
- 0 _- ^( ^" K2 W3 F7 d P
/ ~8 R& [' |' o+ R' u( ^7 ^% c1 t
0 n% Q" N5 |* ]% v% l9 A
; ^% l9 o( a% R
8 W2 L* n, |0 ?; e: z. g- 4 c$ s9 l0 p! q' c5 f( X
- 2 U _) _% ^* J
- p+ f. u# {2 ~+ }
, C% C. l* w: o0 [: ]
5 d3 z- \" z7 X, y- ( Q2 x7 a d: f: ?
- " Z% c- ]1 y/ N+ d( o; {% H" l) \' z
- 3 r' n- b2 J) x* ?
' `+ {2 C# D7 ], i( \1 h. V
3 N/ V+ ?3 ^" I j7 d- $ _9 C1 c8 N! i. M( a
- - u; n9 U+ N6 w- n& J2 r, a2 n
; N# A* Q+ N4 V# l% Q- z2 Z
######引入库包############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()7 I% R" T* k% r, X
5 J& a! Z; a- Q " o' f5 Q, ?4 d4 ~% ^. p" i4 o+ l
例:线条样式不同:
- 7 T; {+ H: s0 B0 Q' A9 t% \
# N0 t( E' X- j) l* _1 `
9 b! b* t/ w+ s, F5 z
0 k) Y) f6 B+ _' A( {+ S
# N! x4 P% p* w8 D) A- ' @+ f1 ~/ t8 k9 S+ W/ @( s) T
- 1 |* M0 g9 v7 T8 u8 H
; X5 \* J" q1 {7 b$ `7 Y1 j- ( ~% d& b, u+ w; M
- - A! `) A1 q3 |& P, K& P) n
- 0 {7 v' E- k+ [/ [, Y" g
6 J; e: t4 V" x7 a' d
- `+ X) F% Z2 v- h; E
7 l2 R _' M3 _
5 ]3 J$ {* ^# C% z7 O3 \/ m9 Q
1 {& S4 m& Z' G+ g3 | {; @% J
: r* N( P( I, g# v- : X# r: n7 y) x4 n/ L, a& I
- $ i' d: t8 U& z ~' ]/ K
Z% r, h9 R! a8 h- 7 e" t( n3 [" i5 I* T
- }8 S- ~: T2 k5 q' h$ _8 o8 K1 x6 D9 ?8 @5 e
######引入库包############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()
l( t; ]6 g% ]5 V) e3 K; z - X8 i! [7 a& ]3 O3 m
4 f9 U, d9 A0 d8 Q/ r0 o7 `( _4 [5 V例:线条的透明度和颜色不同:
) S" x f$ m- G7 L9 o/ n* Z% u
! |! J. ]: L$ l' P- c( N5 x- 3 V' r+ o! @& L
! T5 Y( M ~1 e" z- 1 Q1 p4 v/ O( ?7 N& ]
) n8 Z, G- y$ j/ h7 y
) E( B3 e Y' ?3 J
# Y7 \# | M( u i
1 g) u7 a3 {# i' Y# g- t; N- : k6 R: M }' D6 a) r
% t2 L( a4 m; G) t& R: i, h# L6 p- 8 a, f& [" c. @0 }; \: k
l8 A& u! Z Q. G, `: K
% c0 A% ^' _$ u' G+ C4 c8 E
/ q+ e& L b: C: \( q- 9 M- q7 G( O5 t) Q! d4 a
* n- [9 o: l3 I t- 4 o$ ?# a- S2 p w: J- j
- Q' ~3 Q" k1 U. F+ n( T
- & C+ \. h2 A: S4 i! C: S4 o( C& l* W
- 7 T2 y7 H/ Z, u- h
) O# C; I3 r; K6 k) i& t# D
######引入库包############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() |