|
气象数据可视化主要依靠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("···") . I0 P2 Z) g- {, E% e
只要按照以上六步,基本绘图没有问题!!! 5 ~$ A* ?# }" q4 b
* \1 z$ a% a+ [# b6 W& I
绘制简单气象数据图
; a% l: @, @' v) V' t( W; r- 2 F$ S1 F1 Y& X2 u" K
- ! b& y& \& N# ^2 v
- 4 |3 Z" f. G5 M0 R
) {+ f$ P7 J& r L: F/ H- ; Y l" j; v. t8 K# p0 J
- g+ \2 i# X+ u* y
- 8 L8 r4 \- ?& w7 O) r
* i* H3 u2 E0 N5 y* u2 o
- @- _9 r' k; ]6 ?( b- # ]" _- E; C( I/ M4 o |, M
- , M+ w4 Q* f& G! \7 f# w# ]
! V! `) P7 Z9 l" d; m5 B# n
4 L7 H- D _' ^* P! z1 M& m& K7 a: z6 j s/ `
######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("画布")% j, W- c, g) k1 N1 _7 R" o
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
( f0 H/ b5 C7 m3 {, p6 H0 g2 I- 8 ]! e% r5 p3 I! S; Y" d. {
- ?7 f l5 b; W$ G$ {+ J6 N
q4 f+ Z& S( Y" W: a z
. U/ l+ ], _* R3 ^: J# U- / [0 [& p9 m8 W7 ~5 [2 Y
- * X. q/ W( [0 U6 s8 e: h
- 5 Y2 K3 T% } i# T* J5 q. J
- : X: V6 Q- t6 f, C, m
7 o7 L) m0 s$ U4 _- 9 L7 L8 k( ]+ @1 A& X% q2 _/ D2 ]; c
- 2 ^' B' {7 N% E0 ]. `: {) H i
. n% P( p* D6 a& [6 k, g: g
e) w2 R( M; m+ v2 v/ H& o
; n5 \4 f. l9 A" v2 ~+ P! d8 u, s- ! q/ F" K% V- _# P1 \) I5 D
( ~. d$ f: s) N9 Y/ h- . X: A$ O+ X* `. {4 ?- ? y9 Y
- 8 ]: [7 V: I! t/ y; p" }8 ~
- 4 i+ z/ ?) v# G" p( e0 g& X
- . j( |/ T3 b. H4 }
- 9 |; v& b! q2 `, S2 G8 ^
8 @( {/ h/ A- ^1 ?. C }4 ]5 B
# q7 ]2 i; D8 ]* f$ q
######引入库包############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()8 a. V& d2 i* z! E
/ G; r7 H" X- e- S6 Y; v
( C2 z/ T* p L+ p8 V1 ]例:线条样式不同:
% C! M- Y$ D6 R) ` f# H- 7 j1 o. m' o6 S. d( x5 i6 _1 x
5 h) P( q4 `! p. d
8 I: \% D1 g- t3 ^/ E1 i- @ O- g) ]% S& T9 H; Q6 O5 h
9 ?" S! H f% Y7 X. X+ c
- l! R+ E5 y3 h; C T$ u
: L8 B$ b5 X4 K$ r- + S* v9 V1 i& T) m% _ S: R
3 `2 {# ]* g k1 S& ~- - s+ o) M L% ]! E3 |) B" H
( |) \) J9 h1 z: B- / z8 H9 ?4 Y+ i$ B+ p& I
: o" o6 c3 j, k% n0 U( B
4 `: i! R: i) y. D, G* k
+ C5 J- t! l2 i2 d
: j8 o! s/ o# H6 G2 v5 B" y
8 m, W+ [, c7 O* \ @3 v
7 R: T- V) O1 v0 b/ }9 c% t8 y
9 _) ?6 I6 W* k& l9 U
7 [$ O% p0 { ~
+ F" b" J- }/ h; h7 ^' h8 F1 z( @4 Y3 W
######引入库包############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()/ f ], [6 U6 l" Q
, A" i. c- N" W# u" J! E
; ~* R2 {4 s# a9 \0 r! G0 P8 }: G例:线条的透明度和颜色不同:
) W6 s V7 \+ W% X- # Y9 r1 J+ w4 B/ {
- # t- I; T$ R6 d
- $ \& L5 o8 A8 P0 R- b
1 m# W6 @* B& `5 |5 y: ~, g- ; O; } o0 Q3 l3 v+ q+ D6 w6 f
- 4 E5 V0 Z2 t+ y6 O; w, \* }5 N
- , F" q" x: \; p! M6 q
- ( _ q8 V* D! K
5 M5 M& l9 P7 F( U1 f! o
: F: V* X5 B( `1 C- : v2 o3 L9 U* O( o0 r# K/ A* k
- 0 g$ d9 f& i y" u) m
- : j7 ~. V; |) \% s2 U- |
! Q, z# e! o9 Y+ b
$ x& u W6 u3 d9 L4 A
# t* q& P* ^( \. i$ [: B- 2 Y$ n; g/ X, `( e: m9 x
- - @% _, `. R$ m! W
$ c8 }' u2 P* y7 w- a
L- O8 V q9 ]9 }+ {. ] t8 j, ^" m$ y# w
######引入库包############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() |