|
气象数据可视化主要依靠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("···")
; N# T5 N# B4 {, A, v" k) W1 }3 k9 k
只要按照以上六步,基本绘图没有问题!!! 1 A. G P R7 L& _0 q1 W% c
5 M# _; g+ M! s- W绘制简单气象数据图 - 4 W& P- p0 p5 Y1 Q% H
9 v1 _8 S s9 @. d9 P8 f6 `" _- , X' a6 _6 m* z* _, T) i, N
& k [7 J: J9 Q1 _6 `- g, S% I( n- z1 Z
: T. p4 q7 N D- ( s8 L' ~2 @+ A! {5 i
- 9 g5 w8 O8 i) V5 c/ _9 n; C( y
' \. K1 m$ D1 y
9 m: i W8 G6 n
! _; D3 p- T& z, X: i0 r: b& C
8 t* k2 Y6 u9 V" s8 G' w
& I/ k! F2 @$ Y( J- 5 E$ h3 Q6 g, p* U* ]) i
/ \1 v; V" N# N+ W* p4 P
######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("画布")
- Y% M8 U. P" }
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - [; B g/ R) z& k v& i
- ( z' G. r; D$ }8 U: Z
2 b1 u+ [' ]' \/ E" {- 8 ~: ?6 d2 c! k" p, U3 W
- * ]) R/ u" B& ]9 i
8 W J5 U( N9 p# I
$ F w* b* J# D3 w* y& e- : y6 Z. a( N: _% z& H- ]# p
- 1 ] K7 ~$ L4 {
& Z6 s: O1 J! U! _' ~
/ ]8 {. z( g5 [& z2 e/ h8 U
7 z6 N' J/ I% }: `0 N4 a; u! Z- 0 b I. {# j& D* `+ {2 x
- ) |$ P" ?2 E2 T. j
- : _3 m( d/ a" G
- " o- i& D4 j' K3 G/ q
5 F1 P4 _2 J- l* K5 {6 g2 }# u- ) b- L) t9 e% ^' X. A' I
$ |. E, l3 u4 A- M% M
: J9 `3 r1 z) t- % I7 i) B3 i0 S5 \
- * ]2 B, A" g, T' u4 _
- 0 Q! W1 U( N8 ~7 A
! T- T& \5 U- |
######引入库包############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()
* \' s- G: M* @% L, }" z/ G 2 i7 w& c) ?6 J9 U- K5 r5 Q/ W
. {# H+ K0 _# w5 l. R- ?
例:线条样式不同:
- ' X/ P; i3 O+ s6 B: Q' E' U; h
- 0 V5 u P) O9 y6 s/ s$ d4 x+ A: q: _
4 s1 Z8 u1 z |" c! }) ?$ I- ! w2 \) T: `( N& b9 {
- ( P# D3 ?6 N! D) B% x
4 Z8 k2 U% k. U E- , D: S- i% Q: \' F
- 1 F3 D8 ^* d" t+ r1 o. f9 u( Y
- 2 V) [: E) |3 O/ L
' T( F% [$ O; s/ M- 6 W2 x8 e4 k- z3 e$ N2 k+ F- u
- , J, ^: L( Z& A0 k* w8 ]
+ w- V( ?! i7 @! s- - M! e/ K: Q/ P; W% T% E$ k( h
& m9 X' D' ]3 f, p4 D+ [! k- ; N$ j! u1 e5 N$ F
. \3 ^+ K2 D$ M* H
, S0 K+ ^% [! N! [6 }* {6 m
, r+ D( X8 t! n( l5 U! U0 E
, Y5 G2 S4 o' D' S' v- U4 ^- F
, E i- y1 \5 c& ~# Q$ i
7 w8 @3 _" y5 J7 k) E
# t7 ?% P# o$ f$ y; J
######引入库包############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()
/ C9 o+ ^/ B$ R2 b) P2 l9 @ ! v, j. S2 R- g% @
# p9 u! \+ t; t, G1 o例:线条的透明度和颜色不同:
! p- f! B( b% C$ _) ~
. M4 F% z* Y4 e: y* l* J3 J
, O, E; c, k8 T4 e( B9 x2 }: V W. \
7 D0 |; c" K8 S9 p( D
+ G( i& a2 M4 S3 J. }; B' |- - k4 y. q. @) f- J: @: G
- 9 y) b% o6 {: g' G( r
# ^1 c/ M) v5 m- o- y- ' P+ {# t9 _, O! B' O# b
- q7 q( B, i- P8 R7 B- 8 E" i5 N0 m) K; g! f
5 V! r( X! @3 ?! f& u
; @8 V8 \* m/ Y9 b1 m) F" s
- I6 I# o2 e; S
1 ~7 _1 ~# A: @/ m' {, v W- " c( A9 k' q# X7 [5 Y' M& e
- ' |; E# O# g" |
: v4 J# g# q$ q
/ p0 ]1 j3 O F/ ?- v
- x% }' f; s! ^- _; @% F& w7 W$ y- 2 c1 c! }' P$ {. P7 r+ J
! m9 J$ q/ M0 ?# V0 S1 a+ y
######引入库包############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() |