|
气象数据可视化主要依靠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("···")
: @# ?' S" [" n# ]
只要按照以上六步,基本绘图没有问题!!!
' ^8 N( b! @. t) j4 C4 L
& L+ M* p" c3 a9 P. [绘制简单气象数据图 - 9 d$ ~) s0 `1 o5 @7 N; M6 d9 B% b
- ( \: k* ^7 B0 y1 o H! @7 i3 X
$ m% X8 |% C9 Q/ ^. O+ J G3 |* Z
7 y1 x. d4 e( t+ {$ U1 [- . @! a5 o6 ~+ z X7 a4 A& A
7 t( O& R+ X7 A1 z! D, q
: e% C. [ r" d3 O- 6 T2 a. E9 q2 N+ a# a( [- y
8 q/ |: [9 `+ _: u2 C+ G2 R6 K
1 y1 Y; \+ w7 l9 W u! O
) i, T3 g) e1 p% e* g- 9 h+ [0 v; O- s9 A* _4 @- ?, j+ B
, D a; m0 d" S) M1 V3 c4 x3 c
, G9 @! X# t( [* N) ?3 u
: C4 ~: [5 R" }
######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("画布")
5 n. a* H! ^( f8 l6 v
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
9 m) {6 K _# B- ; f9 @' R. l; g( E1 S( K$ X
- * S6 ]" B) s: q& F8 ^4 W3 i
' m3 U% n& e& {) ?- " X5 j0 Y2 S; A" u& t1 G
- s- h9 g1 ~5 E# X
+ X- [$ l: ^* |) f% e0 E4 {* L- & [, v6 ^8 K) @4 }$ R/ k) \
+ p/ y$ i1 ~# N }8 b; B0 s7 y1 L- 7 [" y# f) a) P; v2 ?
- * K" d# z$ x' N* C8 w2 @* ^. C
8 ]9 e; Z1 v& C# Q- $ o, H* E/ Q8 w; b3 t/ \8 k
% ?4 [9 K* @$ F" Q v1 x0 U# T
% J" M; f/ w/ J$ v7 o/ E) W/ X
$ b$ \* k& E" v0 V- ; V% L0 V* a, ]" |" ?; U" b
8 x: ?% N Q& s
- O; q2 `, D+ u0 y% r* J" c- * w' r$ Z8 B( k
- / X; `0 b; j; Z1 w
- - p* }# ?0 [& {$ Q
- T& I6 u8 f6 m- Y8 c0 }; P, ?2 F2 o, d3 `8 q. 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, 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()( \ _! c8 M; M
" R$ _0 X4 c' o; r/ x* S) I1 _! [6 E
* U* f; V' q2 Q例:线条样式不同:
% M" U, y' i; x+ H( Z- 3 b! x' w' ?1 Z+ f4 \
- d6 p4 t0 E% c+ ~4 X7 t- 9 K {' u* B2 o
8 h) ?3 I$ e. j- A, Y% O5 A- . u3 V6 K o5 e
- ! T/ y& h! @/ j$ B6 G' f
/ J( Z" C# P% B+ a1 a0 A
5 E! Q7 O2 k2 c- K
* a$ b* ~3 i1 v3 P1 I: d7 D0 p- ' i6 n' d- o' a4 h; ]5 f9 t3 J& r
2 d2 C# ?/ q) B: U, {- ; [& D; R& t, h6 F* @
% ]0 E8 H# B" z7 D- ' h6 R: d' F \. K' T
( B$ ]- \' i, F! o5 k) d% J; Q+ ~) C- 7 M+ ?6 ?/ \* t* P- y$ p) D
- 1 [* w4 ^- d4 z7 [
- - G. n5 M' h9 e# f7 y
- 2 q2 b* I; _! @1 x2 G0 w
3 V2 x% t* o! c- + Q; d, P* y2 ?- a. ]* g" r3 r9 x8 B
( I( d$ @% d8 }( m
######引入库包############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(), p% y! r9 e% M( f7 Q
; r6 X+ [, f( m- O& h6 {
C" l6 [! W4 C例:线条的透明度和颜色不同:
- v/ c3 _- R0 ~( Q9 ]2 _
( C$ Z6 y4 i9 W1 l% T
9 x4 O$ p' Y. z" q" x$ \/ L I0 X- K9 M6 f4 U1 W' l" f# l
- , G7 B& V4 I x+ q0 n% ~8 D
- 2 t. A- c. l) Y [6 F$ N7 a* n
s% t0 I2 s6 a, N' ~% c* _
' ?% V8 {2 Q" q/ g" m
; Y- Z$ h8 s' k/ X1 S \- 0 w, @7 N6 Q8 H. t
% Y& D- S# t4 ]/ ?; v, a: z
# Z% E4 I. v+ L0 s. ?7 d; c" Q% m. p" f- " M! { s2 x' H+ [; q
- * i/ ~6 m( H p' G+ ^) k" n* u4 d
- & S8 ]" B k- ]' G/ ~% a0 x1 Z. ^
) h j9 [5 i% P# u) P/ q
& U, J: ?1 O7 |; f8 g& t
# X4 Q3 X# u" C1 H M9 l5 H4 P
7 S' q( q* Z: ^2 ?
. r0 S! o, g- D1 S1 |& X
2 F. G* c- T' ^( A- p
, C6 [/ E: p* S- O, k5 o8 J
######引入库包############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() |