气象数据可视化主要依靠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("···") % o2 K, K' i1 X8 K
只要按照以上六步,基本绘图没有问题!!!
% _7 _" B J5 \
i* m3 J& s, G, [. \6 n$ p绘制简单气象数据图 - s" I6 ?) m% E! p3 Y- h
- $ K! J1 y7 P6 |: y8 | r/ r1 G
- + F9 r5 l$ i8 w- S9 X* y
h- @. P/ e8 H( A3 P- 6 f; t2 H5 l5 u6 G. ^( |
- 0 O# J; G+ h+ Y5 Z
- ; T( [4 [' a9 O7 Z1 D
0 z, P8 v' e7 F. f) [+ S7 e( V- 2 h0 {$ h5 j" o' t
8 |( f: p8 D$ y3 A. r8 ]# A" z1 O& x( j- $ }$ p6 ?1 V# L L" Q4 i' x4 e$ t
- D% y* I1 N9 ^: u P' ^/ {. Y
5 S0 e& |# b- s# q% [) Z
, D8 w5 h2 y, g, {' r) |+ C* F' D% x* 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("画布")3 W" l7 l* Y( A. O% M9 \
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - 9 [6 U* |" N# F- c; d) i2 d9 ]
- ( s) d& g" Y9 K, u$ u$ ~. t& Q
& x3 ?! T; z6 b" z% Q( l- / k6 C- \' R) c, C, p) f
- # n* {) C! {0 ~- N/ \% d4 p
4 \ m& S& M# b6 O" a2 m
1 P# J& J6 ?0 P- I2 u- # l+ r0 J5 u" e6 c2 I$ b
- ' [$ n h$ U2 d# V1 o8 u- k
- , W8 z+ r1 I, a; q) O/ u$ E
- ! G. y9 P) e' e( e7 t
1 v( U3 K/ o/ `% |7 g& Q. |) d/ `- 2 U5 b" @0 c9 o9 I: k# M" j) H
7 U+ Y8 d5 Z) } V/ I4 T& f- 9 ^( A, O" Y' P" y" c, `, ~1 g, k2 s
+ J( Y' v6 k1 m) a* c& C2 b) L/ W- * }4 a- D6 U) H
- 6 o: j, K/ c, D
- $ w g, D+ x' B7 ]# s' T
- + ]: v" e; E. N# U8 R
% M ]3 u2 B. C, ?! l" q' ?- " q6 G$ R/ y; h& f2 p9 }
- 1 N6 @+ X: n" ~: D7 R' |
! D' y/ i2 T* j; w
######引入库包############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()# G; U( G$ V p* F: }4 p$ K
2 }6 I. |, y) s% ? + i, Z9 t5 k1 H
例:线条样式不同:
3 [& c( S, s8 D- ; l* e4 A+ K h; ?$ r
- - L8 ]! g) L, y0 R+ J$ o
- 4 n. v0 u, Q' h0 y1 b
, H2 a% B1 d, u2 ?/ X5 w8 R& ` d- 8 R0 n! m+ U( k& ]6 E! _
- % z( I' l5 r4 T/ A2 v
2 Q' C: n. x1 A" p$ R6 K- 1 q# E- l0 a" B7 v% I# F
- : @2 \8 v# d) h
- / C7 P) _& b+ X/ Y' j
- 9 f9 _! v8 H) A1 P
/ W" F& R# E, M. ]3 X- 2 R* h6 ~4 V& h: G3 `7 O4 X
/ z+ a& @; c5 e [. q$ \- 9 p. X/ m. T% C$ U
- ' ~4 Q9 n, n! g; e: e/ \
- 9 g& G3 h+ t4 {
- / ]& Y5 a* f- } ~' d. o
9 S3 ~4 t! [5 I& w, D
3 f1 p2 k$ \! Z
( i8 q/ L3 b6 |# T3 h& U- {) ~
% a; l n# ^3 V; x0 O
######引入库包############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()
* g$ L' x$ i- {8 H 9 ^8 ]/ @; }' \
& K0 y# f2 b2 m1 B例:线条的透明度和颜色不同:
- 7 Z1 r8 \6 C% y0 {- f' ?3 d: c' D
- ! }/ l+ e+ ? a. R$ U
8 u n: V3 C e2 | K1 N* l: `
, p* o3 S! k. M( h `
+ |* }0 T% y N% l
# P" H8 R" s Q. c
7 |" H9 Q% J( w7 r4 S) P- " N2 ?" V1 p+ T# }; Q; X
" `0 B* E' Q* ^ w
0 k7 x, a. r$ w" S3 i. Q- 1 E+ L0 T* w9 i1 H5 x
+ j- d, n5 c$ i& a, f1 A
5 K6 i* K( \0 r8 J2 j1 W! |- 4 o0 J5 S" B6 [) X N2 Z& p% [' f
- 0 x; U Y% U) @# }6 _
- 1 M" `+ X5 |, g5 s8 ~
0 _7 c6 ?. e( L; e& D
, a5 z1 ?% V" D4 v$ M- ( u' E6 _0 p0 i! Y% g
- & d- \3 c* `- d# r2 n' { e& S- }
- 9 i8 i& m9 p4 T: l9 Y9 A3 d& ^
5 n' B& T; O" P, b
######引入库包############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() |