|
气象数据可视化主要依靠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("···") 0 b: ?( k3 ]' q& y. e) |: t$ @* s
只要按照以上六步,基本绘图没有问题!!! + ]) G/ f x1 s, k
' a1 M5 k, s# r4 F! R绘制简单气象数据图
9 F' T: N" u& v* H- H( I' h
' O5 m4 q! E4 W7 m' L: h6 T% A
- [# }/ ^8 D1 |7 f1 e: A
# w+ S) a& r4 U8 I! [6 Z- ) M4 b3 o; y- s5 I5 z+ c
3 r7 Y; u! ~6 U; j. s3 }1 A
- @3 O8 u7 @0 W# \ s c: q
6 ^7 v$ o, N* y* q `9 V
8 N8 \" u7 w# o: I1 q- U% v- ( L5 X' w N) S" F# W
( a5 p, f' l( i2 H$ A, Z- - N# X& A$ {8 J* Q
- e5 O! O; g) o
- & w+ e0 @3 `( r3 O! @* {4 t
5 b @; b( w/ S& v$ F+ a) C |7 j
######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("画布")
4 g: {% j- e6 M5 B- Q8 S+ V: M
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - # o0 G/ n {4 h. L5 U
" R0 |3 t- q6 L. z3 N* O1 `- 4 n7 ?. T1 N% j7 w
- - r! o; i/ _, \8 A/ m8 z. ?3 j1 T
- - Z! u9 d, x$ m: }
- 6 [" x$ d- G3 O( n- H8 N1 |& H3 L
+ C0 K* ^. f3 z' _5 z6 f3 z
9 f+ s9 t2 T- p* y) m; G; n/ d
+ [: _+ V5 ?6 X- $ b6 N/ F4 ]5 J* s
% F1 O2 G0 q9 s& ]' O
h7 x9 D" ~& d( A! k. P
7 n+ N6 p$ C, L3 v. `$ U- 5 D6 E2 u9 D+ P% v( v
- ! B @/ H; h% W
- : k2 z Y: k& w" L( a9 ~" N
- {0 f' \! O$ r
- 3 h" L, J5 b8 f- o' H
+ G: K# ~! w# A- 4 E8 O, V1 }1 |, w
- ( J. v: N5 T: h b( W
* a$ e# ?4 K( `) `% V
" G! ` N" Y/ y( y. Z- t2 G2 r" |- e" ?( [8 K
######引入库包############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()
' q/ k, E [: u, _
( c. a7 V4 K1 |* `4 N : ?7 q" C1 H2 @% N+ R" {
例:线条样式不同:
- % B0 X; X! M6 k; y. M: ~1 d3 G! ~2 J, D
- . Y7 H* s. M+ r
- . N* c( `2 j% u0 U
3 Q4 j0 n6 u# b& H& z6 ^( |- 5 I8 A, b2 r. s I B" h9 I
& C. e8 Z' ^) K$ M1 N- ' N) {! _: p" T+ M7 b* U$ H
- % X1 b8 [; d, H. I+ i
- ; g' n, N( b1 \6 m
- % z% ?' l* d5 ] O6 Y* V7 o
. x, C5 N1 J8 f1 `- 5 h2 g. z( Q4 M# r: T7 R9 \
- 3 n* w1 ^6 m6 M( _! T! Z
2 `/ i7 g T& b! d& n- / p2 {, A8 x# }- ` x' S3 e" t2 R, o
, J2 C$ n; x# J- , W# I* V! S6 h
' y! j7 Y: T" N, `- ) Y. T! G- G6 ]& r5 j
- ) `$ j( V5 F7 ]0 N
& ^ D; z6 t2 V/ V0 w8 S1 c$ v- [- ' D4 N g: C4 ]- L5 J
4 z w& Q2 U7 P7 p" h/ Y
######引入库包############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()+ |$ Q7 n: H2 G- x
5 G/ d" Q0 R; [$ r/ Y9 [+ g
8 }: I+ D* v" b( V; }$ `% V
例:线条的透明度和颜色不同:
- ; I5 ?. s! L7 X: O* `/ y1 {9 R9 }
- ) ^4 l& v& _" f
/ y2 J2 R. q3 Q. ^! B7 o( T- K
/ C/ ~ h' @) x1 Q, P, H
" w; Z* f0 U2 W _, ?* x
" C- @6 j' t, ]
! T5 v r$ H' M5 k# {4 p) M! l/ ]- 7 X9 |. Y% d& ^+ D& ~
- F- P6 }3 [- j& H- 3 N' s; z4 ?; [* d* q( d0 m
- , s1 B3 P* l, @/ T: k" E; I" }# p$ z
- & h9 K; x1 o1 B3 B! ~( |
- 1 _1 a( q( b1 O/ N- u4 @) j
M2 y" L; G4 Q( n) f# ]+ I& \- 3 l" p7 O6 @. E) [/ c. i- C; C# B
- + a/ ~3 @6 l" F/ L# `: R
: w! o$ ?. a5 `: \4 W- , l4 w* R/ l& f. G+ M6 I
! i. U* O) ]& K, p
+ W8 T% k6 ]$ T1 X/ n- ( d& R# n/ Y3 _
" e! s# T; B6 q7 V0 t& A" `
######引入库包############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() |