|
气象数据可视化主要依靠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("···") * S3 ^, B' b0 }
只要按照以上六步,基本绘图没有问题!!!
4 N2 i( [- `1 V& `; s8 Z) i2 t! b
4 f( I' Q! X; ~) [绘制简单气象数据图 - 4 g7 K& z4 S2 C3 i, f& K' f
- 8 x: L) C; \$ K! Q( L, @5 u/ k
# _9 n4 K6 Q8 f- 9 L9 D% F! {, |) \& W' X
- ! C/ [: U6 A* S' J6 N. t0 V
- 8 d! ~7 f5 k. ?. I
) T3 |8 X, u2 j9 G" a- P- 2 N ]# H8 ^2 S' Q' S0 |9 a
1 a! n; @6 M' n7 U4 g. y
B. l* D2 x3 p9 F4 |
+ K9 A7 D; i7 c6 ]
$ |$ @% [2 B9 n2 z* v' }7 Z" E
! T1 `, V# X# F) n" z" T- 1 U f. S% I& |6 V& T# \
0 E" @1 O- D& u0 M
######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("画布")# f/ r" j/ X+ z5 h! h. P
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
* a/ ]! P. G- o8 K0 l w- : Z2 b7 q2 [4 i- A3 a8 q
% F4 p8 R/ \" p1 f) H) l" C8 p- , l. t: v, ?) S- H
7 G3 s; m/ h. @4 W+ P- * Z. C3 \4 c3 [2 h: `& \. l* E; @9 z
7 ?. E6 L" R$ T M0 W
4 \/ \: K+ t+ k0 {& d3 C5 b
- s' p7 X4 B ?8 O+ v' X& ]
K: j# c( I& c- S3 s2 W. A* a/ S
6 u" t. u5 u4 u' N
0 n; }5 ?; l' |9 i
; s. n: B, i- _8 `- 5 j& Z7 ]9 z3 C
3 j+ h6 K1 a$ U: A6 W( y- ! Y1 v6 _6 N& B( U1 C
8 x3 Z/ a( d2 R' O, s! Q9 T
* v" g2 v% N8 H/ S h/ H1 Q
, O( w5 r% j% \& S4 N5 f& h
6 w- u( d! D6 f" j) c0 s- % g& w ?/ R# Z3 r: F2 X! b; j
2 @7 J2 \2 m! D( t" {5 u* v
/ E$ Y _. i& N2 {8 V
9 f/ Q( o6 w" ?, j. ]4 ^
######引入库包############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()
. P/ o$ R; D1 R" x( W6 s9 \ ! g- ~+ }+ n: h7 G/ Y/ ~+ y1 t
# J; ~& [* Z0 b" v" N# g
例:线条样式不同:
( @6 Y+ e7 D6 s" }! F' T
0 h; G8 L) e& T# O# H2 C) w) G- 6 l) }4 ~) y4 E& X+ ?) b
- / I5 Q5 Y3 A9 C* q, C. q
8 N. Z! k$ i4 Y
- N8 r" }1 {6 w3 D) K- ( V& S% Q( D; L. Z2 r
- 0 M3 W% @9 y8 w8 q; ]. {+ {% A, |
1 A2 J+ y# h6 z( V' v+ }* ~% K- ( i. f1 {# p& F
- # V' K5 o0 u4 i7 o/ r7 k5 _( [: V
- 4 O; G4 ` p* {1 P1 U+ |
4 T$ u/ J3 u; T7 ]) b, ]5 \- 7 a; k$ I' Y1 {' N, A: J
- ) j: t) Z! r; F7 [/ ?% K+ P! k
2 X9 J: R( Q0 H6 V D f- o0 p- 9 y1 c% H# z) s: z( e: i: G
2 U. ~4 C/ u, b! n; J- + s" n+ a, ^7 e
4 n: ^; t) y: B& R; e$ G- % Q; ?3 \. T; E: Q' Y, k0 F; w
- 1 _1 \+ m$ K& x, B
& N4 _# Y o3 a" y1 G
######引入库包############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()
4 g* V/ W; w5 K0 @$ [ 4 X F6 K+ e+ O8 R
2 |( `: K- q, Z2 V9 N& T P, }% v
例:线条的透明度和颜色不同:
1 w7 ~7 ]' l! @$ [7 f a
. t$ a8 [0 j# X+ G' }1 X
) U. n5 J% p v+ ?( k4 x- 1 k, @) F2 E' g
- 9 Y( G: I0 @, }: z3 u/ q
, f, C! ]& E( j+ v$ ?/ O6 X6 Y$ s
1 L, _- u; R9 E9 g5 d2 v- ( a& I5 p; z, o8 h/ \
- . Z+ m' h& X" n+ t0 v
- & y4 U, T& {1 r6 r9 F5 x+ h
; f, p/ X% T' D) `
+ a3 D! T& f+ L/ \
$ Z& M J9 x# X. Y/ b; ~
" m: E: V! |+ v# V' f
9 q M, j6 H+ a5 D, p
* f4 V0 z. z( v+ E- 1 R( p7 r4 c' |! N' O4 ~7 G5 M
- + X: @' ~ P8 f
- / {; \6 w2 J8 ~1 o
! O2 x6 L& l0 x* J8 U) z
0 N( a6 d t8 `/ L
6 I* K& ]- e! L, A7 L1 a' I
######引入库包############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() |