|
气象数据可视化主要依靠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("···")
: j2 B J7 F5 x$ ~. X
只要按照以上六步,基本绘图没有问题!!!
5 Q* s$ v" f5 a3 ~' h0 @
& d5 I' Z2 l9 |' q, R# N绘制简单气象数据图
( [. ~& a; Y5 y' s1 R5 X- $ E0 | M+ L. X0 b9 Y8 N
- + B" } ?2 C3 v6 a% @- s
0 W/ }6 t7 A& P4 i
( x1 D$ N! @$ Z3 {0 v
2 h4 J8 V9 ? x0 d' t# I0 a* A- * Q* b5 z" p" A9 p- ]# C, c7 E6 A
- 1 P! r- d* X- L. ]( P
- 0 M/ l' z+ ~! B9 W# |2 G1 c- L
# G8 K+ ?0 V/ E( f- ) C( q7 B) v9 \5 h+ X
- ( d0 \% n% O7 u' g: }7 @) M: v* t# M4 r
- , \ O# H& O' ~, t5 b! w+ Z
9 v7 f' B/ x0 h: F; O6 A l: ?- Y& W: ^1 ]4 H
######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("画布")
% i5 V1 Z7 `2 \8 o1 ?, F
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
+ G0 ^5 k( O( u$ H7 g
2 u# R" I% ^, x6 v/ n- 8 ^2 g& e4 s+ g. [9 F* v
6 i" A& D4 t8 s Q- , C8 Z: Y2 C9 A
- , c5 _8 J/ ^1 F2 c. X8 x
- . Q0 p9 X3 o9 T/ k* f7 B% q
# u. G9 [. F, N/ ]
' G% }5 V+ l( a5 R
. h# ^. i4 o* [- 5 C7 Q' I+ R) M
% `" I6 s- o. i9 B& P- $ @, H% V' H6 [4 w: b r+ V
- 6 l3 s) ?- y( h Y1 [- u
, e3 X# d! L+ S0 ~1 n6 `! x
5 Q' | j* n+ b, V0 F u
9 Y, A; b( L* l- v2 p: i
5 D* Y( ? g9 F4 I- 8 q6 ?3 W, u; a3 {9 `$ A; s: b
- 5 V0 P& a& ^5 m; r: D
/ F x6 h6 u- J5 N/ n& f- X( D. Z+ m: i& w- # _3 b- o- ~6 [% l6 x) N g: Z
- " O- C% y. b' ~3 ]6 i
: k; Q! A* ~. w! W# V& W5 V
######引入库包############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()
/ @! M& Y! h2 M: r% \5 y
; E7 x# h' ^* B5 P
' L% {: I1 A" g) B% m& k" d例:线条样式不同:
- $ B- ]1 E) s7 A9 |5 B6 z0 @
- 7 {/ m! \4 T, t5 J- y
- 4 L0 P; p9 O: D, L" ]
- ' \ m1 n7 ?6 F: r% J& |1 ]
4 l! ?8 B8 K B( I1 {, e- / ?" C1 c1 w, l' N
, `* f- ~3 T1 M" X( U
0 N, @8 s9 U9 |' q) c/ y [
# {! D' ^2 ~/ u! c' m- / M* W: y! a4 X7 k* `
- ' y" Z- P8 A2 k8 n5 K
/ L8 W8 b$ W( c) E- . g, `4 n- J8 y
3 |0 |2 m5 a4 N5 [. _* t- # f; @- R7 V5 i0 c
- 7 Z6 a' t6 D9 k3 I; x
5 L+ E! n2 }5 ]7 ?; g* c ?/ K- 2 t Q1 X) L+ p0 y3 h% x1 t0 \4 m, E
7 i& C! A2 z& A! J! z! f% r, \ X1 C
2 P% y' q' i/ `* l" ]- % U* p! x& b& q3 n7 V& Q
0 g+ F- P3 ]& ~" K/ `
: `0 H% L( E* @/ |2 K& k
######引入库包############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()& w/ }5 }8 [: Y9 s/ _; Y0 N! H9 p
4 s: s+ {; s7 C% n8 }/ m) q6 z3 ]
8 n6 H' P1 F l- C! @! v3 Z7 {! G" R例:线条的透明度和颜色不同:
- 9 F# b5 J, p) q3 C
- 6 A3 A5 }8 D" f7 M
5 ^9 @) x1 F/ Y- Z+ }0 f- ; k4 {$ C( b# z7 c8 w$ _1 |
; U4 l( X. B% a- : I% ~! t/ y2 s- _0 v, w, v2 T
. V8 C3 e" Z0 U- ( o% q, _+ |6 C, K
- n- Y6 F+ q$ _7 F1 V& s5 v
) T! w6 ?& |) C9 \2 u1 x
) H+ w; A7 |+ K. R3 b- T7 B
* i/ s2 P$ q( }: q
# l( K% F. e# X- O
4 d# X+ Y0 L r0 _, z' s) n7 E1 ~
' t0 m& J1 A' P% E, g6 ?4 Y9 M# F
& m( F" \! p+ d' ]3 X- 5 q/ r. H! B1 O% R$ l! X
* F O( m0 N; U ~6 D- * H! G. v0 T, ~; v) h
1 v' g' U- @- D( Y6 ~& a
. B) B6 [6 u9 z- `4 M' h$ r" Z: m
######引入库包############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() |