|
气象数据可视化主要依靠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("···")
" t' _1 \6 \, `1 w
只要按照以上六步,基本绘图没有问题!!! % P, u6 {; ~" E+ f% [+ G6 F6 A7 V
% `2 S: h! e* e" w) p& b绘制简单气象数据图 - * `9 a/ W0 g/ d9 t6 Y5 S: S( E
6 W0 _; e" b* p a- 4 N2 j! i _- m. E7 a% v' }
- , i% m9 G- k& w$ ?; \! A' @( a6 o1 D
6 x- Q1 U/ n+ {
6 K; H9 A0 V( n9 ^5 ]
* Q6 ~* A+ a7 _/ A1 v* M6 S* M
Z. O* o: p7 Q0 g
2 O& j' ^* d) B/ }) ?5 E
3 m& n7 r+ H3 u- l
0 I, e& M% ~0 ^ y( r8 } A, e, [
. F+ J2 I" ]$ \. I1 b2 s
7 M+ c" I- F" O2 k
) _8 a- W$ ~- p/ |1 }6 Q" _ h, ]! c5 Y+ C
######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("画布")
9 w0 _, x7 B, M3 N% t) {+ N
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - / n0 _- T6 m4 z% E+ C
9 i$ m, `3 O9 J0 n# I
$ G" j+ A3 j8 x/ h
% G( N' _! Y. U3 ^" U& i% X- - W& I+ W! d- S, X: G
) m# E/ O B/ w8 b6 m" g' K( g6 M
5 J" C# C0 l5 h& p" G0 t$ M- 3 k4 O/ l- h; S# X7 a2 c! _
& i0 }2 g. k/ Y" r; ]- ; K! U; e7 }/ V4 J
/ L9 n- ?0 m5 h N- - g" Z$ a9 h# r) u: |
8 V* \! W( m8 G- 2 g& X4 _8 R1 |) `2 t% U5 p
. R. s4 S4 ^4 g/ f- " O0 v+ N# X# s0 |( z
+ ~1 K, |0 e0 H8 Q( W p- 4 w% R6 Q( M6 t' I2 ^
- ' @. d0 n3 r( l, |: N
- - `# U" g1 P+ d/ m$ q" s
. ~7 G, |6 Q% u. X+ n9 _/ d
3 P! I! d, T' [2 z% j
) a- Q2 |: }, C4 v3 h f' B6 f3 n+ U/ s4 q5 s
######引入库包############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()' M8 a2 T; k6 F* j
( [5 W* P2 O. {/ H/ j ' t, q3 X" l+ m
例:线条样式不同:
- 8 U0 P0 N& M3 Q. ?! d; A8 m/ h' {
- & E; Q7 P. L% N, z. [& S6 W
) {$ Q( u9 Y( q& P6 }6 Q1 {
! ?, n/ Y3 R* H. g" L- . i/ z( f1 r7 J3 L+ B ?/ m0 P& D
- , e9 ?* H. H- o1 _! o9 O r
- " g g B) R$ S; y6 e( s% d8 L
: t# }/ x6 l" W: s- A9 Q4 K4 a- j- ~1 L( ]
- , \! O3 k; t( i, r$ U: Z
: ]7 Y8 _0 }0 X, \8 O: e
0 J# j! F0 S1 _# l
0 j( c& l6 p2 C% X+ m
2 t+ k6 t( ~4 N1 L+ p; Z$ Z7 Z
4 Z1 l4 S" V; [2 |
6 ~8 I5 b- E7 ?6 z
3 d1 f J2 \) h' O- 5 R1 i8 J- w `
- : Q5 G* B% ?! o$ a1 i" r
- 7 A$ I( Q# e7 v5 c+ @
- $ V9 B- d+ `% z g8 K
0 \/ Y' M, q3 c# a& Q/ t' E/ m; W# k/ G4 t4 j. D; X
######引入库包############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() z1 W8 \) I3 Y, R0 P, T: r
1 u6 c. u6 N! i% o2 t" W
) ]' v, o) z, [例:线条的透明度和颜色不同:
- & J) C+ q! q, n0 k8 s7 A7 t
; ]- Q. J- }- B9 u8 {+ X/ A
$ ^( w9 n! y ~) N3 \( u- ) E9 N' U0 u/ L# w
; @1 X* |$ a% G& w
! M9 N0 ?) S1 M1 j- x
+ N) z" j. L7 W+ [2 F
* y6 [5 s* D z' |
$ c9 [4 M8 d' U, c# b: ]
; U# [0 x9 Y" c- T1 p
% M4 K, I+ s1 t$ b$ z& o
8 {- E$ H5 E2 N& x- ) w; `) ]& v* O, T
5 s- L- w/ _ k& Y- 6 x* i8 p. F5 p8 O
6 M6 }! y+ U* D# U: c
# E0 X" `2 o1 q
% D# I0 \! m1 Z# A, J! V- 2 s: D$ K( F9 e3 V: H' U% c
- 8 }6 s3 j& H/ ?( T( `! h! z7 I
- L; @& o6 E$ C& ]( `/ g/ Y; G" n5 l4 C3 e* `" [
######引入库包############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() |