气象数据可视化主要依靠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("···") ; v3 W; Q% T" v& p, _: v/ f
只要按照以上六步,基本绘图没有问题!!!
1 Z' X2 Y% q! ]! S4 w+ r- @0 v1 H# O* T# D
绘制简单气象数据图 - v# p) q4 x3 B4 @$ F* F
- 9 [& ^# R( W8 o; \ ^
- $ z( q* u3 a! E! C& Z9 _6 a
3 \! F* w: Y' B% K& }; h2 G; h& d- ( y* D4 j: U& U \/ J
- 9 |' L2 f& g) }/ J3 [* _
- ! O- l& D7 a. S/ o2 e c q& ]
- + ]) g/ r) @) p7 P- t0 U$ b
6 k7 I6 ]* R" U$ ^: V E' l5 L9 ?- . l8 X4 Q( N L0 P+ b! d/ t2 t
- 4 P& q" m8 l+ S: Q# J
) ]# a5 ~ ]: B) P0 D
! w% d: N6 `0 Z$ i! F& \
! A6 C% p* a7 \" [2 `
. Y3 {6 E. L7 Z% _
######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("画布")
& x$ T" w" k1 O, l+ o9 M D
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
& `' Q" @% {- b9 s) D/ A5 [
! i$ p- R' J, ^3 I6 _
- c3 |( K+ e! K3 c- / q, D, _( b1 H) j$ o
- ' V: z2 `' P/ A0 R
: I5 J" j+ `. C1 j5 C- T% V0 T3 B; e' w
6 G& g' J* i3 a- f3 R
- o6 `; q+ Q/ l- e' `- : \& y% B8 @+ U
2 k: s# s- ~- U8 C% }. }0 K& U
$ ~: Z" c& B% i9 ~
* s* V2 a7 b% ]8 g, m- X
" K7 ~% x* F' J! w7 y- ( h9 z# |5 k4 x
1 G7 ^* o" k1 y- i- {" D7 \/ P
$ @/ E4 z* w$ Y2 t1 B& t! c9 w
- H5 M! ^* V$ Y- G* A k! H
7 Y0 h" y% b* q" ^5 _- b# @4 T) H
5 \+ ~+ A2 D, g2 J: ^1 [" c- 9 t) b5 I/ f$ B9 I
# V' H, `1 x, r% C7 q& s' h
5 D( J& r! X* W! B D
G( q6 U. I9 |
######引入库包############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()
! ~! Y1 d+ g9 J( h& S . D) ]" O. E3 q3 K7 ~, a8 I
' S$ ]8 U8 z" S& z6 G" x8 ^
例:线条样式不同:
. ~1 _; z) B8 |$ U9 L- $ t0 I- t/ [/ M
- 7 k% F* V0 }" Q+ S/ H) Q
0 X6 c$ }8 @. o! P, P3 o- ( F5 G' B( v: d! {' S: Y
1 Q6 {& Z B/ y0 t0 U3 A3 e d
* B2 W% |% k6 Q% g- 5 k$ t- C0 p- w v2 v
- + q# R2 l4 P* y
- % X) C- p: @9 R0 u: {8 b
- ! e2 W7 i% {& U- R& f
- " |$ _/ b; d' [& R. {; q3 \4 y$ K2 J
. j2 e0 i7 J( l
7 e1 z* d4 o$ L z- 3 \* N) ~& V8 O8 {
! H! T6 ?: V8 `/ S6 B6 z% z
! U, s1 B# {( v: w
) A+ g+ b; B* x s# \3 s1 H
& j" z* d6 N% ]. o Z; }6 o
/ V( o! V4 b h+ Z. J; X
( I; x$ Y: i5 [' A* y- - Y! w u1 j0 K, M* ]
: E6 U k$ q4 o2 q; l! q 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()
) y7 @: d; D1 ` 1 K+ ?9 i8 x3 W
" Q& ]2 `6 P5 Y5 e3 x
例:线条的透明度和颜色不同:
+ x; e' M( Z/ p* f, ]- 7 f% o6 L- n& n4 e+ {$ x# A" M
- ) S5 Z1 J$ E8 V; F1 r
3 W$ O( s9 e9 _2 ?7 n+ \% ^! U' R- 3 ~% }0 a9 {1 x! [' I
' l& i# m& j/ B+ }- . X+ y: t# b3 l ?3 s% t+ Z1 i
- ) `* h2 [4 }1 K9 c
1 P7 F) l$ ]9 r- S) v: e$ R2 ]- ) S" v9 U' ]2 V* W: u5 _, ?
3 K3 q, s8 H/ b3 }$ b4 ^5 S. q- d
# w4 D8 `% w4 C+ g
: _# J. e C: ~/ G
$ A8 O9 C8 a/ E( P- 5 f3 z4 T2 V1 U" d1 N. k- w
- x! N& z) o ?
4 c. g+ [2 {+ D+ ^( G- 0 P1 z' ?: }2 z
" U% F( H& g+ }0 w: M- : H2 T1 [9 o \; q
! C, K7 I8 C! l2 |+ y2 O; h' P2 h
- w+ `$ @ y3 H& p4 Z4 g
######引入库包############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() |