|
气象数据可视化主要依靠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("···")
( I( }0 B$ g; T d* u+ ?
只要按照以上六步,基本绘图没有问题!!!
: K% v- W& Q n+ Y7 Q5 w, K8 q; V/ s. u/ p- o
绘制简单气象数据图 - 4 ~4 K" s8 @1 x- N; C
. r9 c6 G& f! t6 a2 f" S9 i- " L8 \8 E1 q# h, \# t
- ( c2 ]6 i9 A! ^; q* C: E9 {+ {- v
( c% m( F @% g
' I/ z9 j5 H# f; X" [! _- 8 h- Z4 [7 U; p2 ?3 @/ a8 n9 w
8 c( h4 y) R9 ?0 O- ( _3 j; f8 {/ D5 ]
- 8 M" P4 v, C) T
- ; ]. l9 L3 e' r- T; E! n
- 5 M' Z0 H: }' H+ r* |5 L3 I
9 C7 T/ H8 o+ e; S
, l. ]1 `& y- W e2 l. s9 z. u0 ]/ R
X$ G" t \7 {1 s$ ]; E& _
######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("画布")
+ i1 l$ \) ?% ?# v6 r
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - * r/ A2 E. g% L" n. Q9 b
; b: r2 C1 } Z- ( j q/ q" \' E( q c) {
) J" ?: t) C4 Y: p! [
7 z& K2 D# {: X4 p8 p9 Q$ v
6 a1 ^/ ]7 k1 r) e f- 3 M H$ N& n. [- X5 z
: \# b2 Y3 Z$ X2 P6 `0 ]
! s; \& w& A8 ] I z( t
" ~( V3 Q& B# u, K% t2 M! A; @
! T4 e. \6 K$ Z$ x- 8 l0 _* o3 {; R. L
- 6 i& g% B& t, M1 }5 |$ z* \" C
' O$ a7 Z# V' t% h+ H- 1 x6 X/ F1 n. i: J) v* ?
- # F8 @# |" t* V" @5 h
- 0 K9 i! T: a/ y; l, Y
) N( n) _$ }8 A4 f6 ^
2 ~; i2 {1 V& ?6 r; ?% R8 c
3 f6 h2 X) O! Z3 ?' Z- 2 n( l5 Z3 l. n% y* d0 J
- 9 p& x0 N. f; ~: X' l
- * G1 W1 i5 z3 Q( ~1 I9 q
: |) E7 c# a% T
######引入库包############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()/ M9 G9 m+ d. D5 A6 w& Q) L
F `# }# U. W( E
3 E( H' T6 G8 \( ]5 Z
例:线条样式不同:
- # _/ C# U) `. U' h9 s+ J/ r8 l
; R. c! U: v& L M9 S
" m5 L& g) k% _3 c/ J4 ?& D- * S8 p7 c2 S9 r9 Z6 ]
( N/ H6 w- _& ^2 I1 ~/ ~& D- ) ]8 U$ w- X2 ?! {$ v& B' f' q+ q
, T$ x1 w& c7 p4 p; \+ s; n- 7 r1 T, j& X# m9 N9 l
- , A$ ^7 K; ^1 @5 z) I, U, o* [
8 H' Q" \ e( p& v: T4 V
9 ^: O. f) m4 W1 _/ G% R! q
$ L' [6 p& r4 X+ k3 J- 5 e1 p2 p' Z% l$ e* E. x: s
* F' D' ^' x* R' j& ~$ Z
s$ Z# E, U) Z" X0 e
. z+ D. ~8 ]* }3 W. X- ' }/ a1 G) `% \# ?/ B
) Q0 x/ ~% c: e# S, j" g
4 Y3 Q/ {3 E0 k8 W% q0 _+ K
8 J2 l- R+ w; I
. P- P5 Z' d7 J; u
9 L `, F, m) S @, J
3 A; J& G5 X l& b8 R
######引入库包############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(), t! W- M9 V# }4 J
/ b* e% ]) N u3 S( ^: x! g, I
: k% @) y7 v1 D" B, Z9 c& E例:线条的透明度和颜色不同:
- ( h8 b& R, B2 B; p3 h4 i+ M. d
3 k$ T2 k% ?6 r
9 C$ I/ O9 Q" S( C& r; H: v; X
. e- U) J. O: t/ S3 l7 a7 J0 Q2 {
% h4 m X; L# y5 J
A& e; k+ j" z2 C0 c) b& E) Y2 \9 I
. u0 ]: \1 b% ~1 u. L3 Y- ; R' y x* Q1 v: S4 U4 N
& F3 A4 k2 _, h; s- ; |/ r! J8 }6 X
* k- |4 }- Q4 s, ?0 s& S
0 g, l$ O X+ ^3 H
4 [. G/ t5 ?1 c8 U; u U g- 7 Y, @0 e) \ M D4 G9 r* }( C
5 _$ }: R e: `& s2 d( b! \
; N( \$ A6 I+ {, c v8 A6 V# m9 ^( e0 _; [
- b& X: b: X* Z* O. b+ a# V
3 s0 R# r4 J- P! U& U8 ?( R- t- 6 l) [3 a' s+ K
8 j: T; D* q" t( ?1 f9 a2 ~- $ K# z4 e q/ p
+ C, K! ?2 f/ X1 J' e
######引入库包############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() |