气象数据可视化主要依靠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("···")
5 x- |9 O. @5 H# o# D
只要按照以上六步,基本绘图没有问题!!! ; s. u* K- P2 L, \5 }+ n
/ \: ]9 B& F4 ~* H: r# L
绘制简单气象数据图
/ H$ |8 h) `& A- t/ C- 6 `" y. W5 u2 C
- - |& K1 |9 \% Y) ]$ T6 Y x
- % j" q5 p. \$ k, u9 \: o
- 8 g1 J2 _. J+ j# {2 {) E
- 5 y5 Z) P9 ?5 C0 T5 N" u" T1 D
- : T0 x9 B; d: U t9 q- Q2 h8 m7 B+ |
- n& T5 Q. |/ D( e$ P: E( _
% {% ]( u8 O. \" ^- 2 T# z6 J- Z- g2 k w6 b/ c
- % E" \: I, u; N. l& H
$ o4 W7 w1 }- o- C6 a
+ y) A" a9 L: z7 A9 o e
. l; t* E' D) X% x% d7 r
) P6 i# ?2 x/ `
######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("画布")6 t$ B/ L' H/ j
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
9 e: t4 f8 E3 J3 j' F0 o- }+ h0 `9 p8 i8 L, u8 a. R
- 9 H# [' _& q2 ?0 S4 r$ _: b
- ( ]( u3 P5 s3 _# ]- U
/ |( A' }# h) i5 i& R- j4 A @, b- 3 D6 [0 x! W4 t$ i
+ Y& f# }) r9 F. x4 w8 U
. Q7 m F6 g4 s6 X5 d/ K
& R8 X+ T. ~9 P- \" v( a" E' S- L$ c& o6 A8 O& V* ^
- ! K8 L8 N; s7 ]
6 r/ E% E7 H" O1 T+ O% J- $ {. S+ x0 O( K! y: W+ I
- ! F, ~4 J9 [- r1 W6 u. Y
- " J% o' X7 _6 J8 m. }
3 l6 y$ k4 Z: u5 U" K
^* R1 [2 ~$ |. n- 1 z" o8 p$ X/ S# _
; b- h0 F. \4 d5 D p9 _- $ U4 b- S3 I1 I2 v
. s; V: W7 c7 e0 X4 c/ H
& B3 ?9 e, {" m5 [6 x# o- # g6 K9 P: [) X, ?" d, [; e
7 v+ r/ Z2 {; K ^! C
######引入库包############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()" ?7 h+ ?/ \* A. r& e/ o, a$ W
1 x% S; J4 [) L: [
! h% `, O* s% w6 {: S例:线条样式不同:
- 5 U- G+ v B& R. X" e# G
8 d2 J' `/ u, E
) q6 c( ?2 j* p' _" I4 ^% c
) L6 o6 Q( Z1 W& q9 P* ?0 @' }- : e% g7 O2 @: N! j: G2 ^1 Z) Z8 d" b. v
3 P8 r8 p, h$ A) v9 W- 9 [6 ?, J- X g7 M/ F/ w
# X" C4 S9 {5 _; L0 ?8 c* G- 9 N5 f; J$ G/ I6 I: [; I
- * S4 F9 W+ a9 r% f0 B. b
- , X6 S( i' e$ |. i. ^6 C
# m; e" ^5 U4 N9 R# f
; {9 V( P' U+ B- V5 s- - I! i! `) d5 t: t E
- / Y0 [8 S5 r# T' ~% b* J: D
2 f% g4 O! N6 C3 w3 |( Q ?
4 U" e" m- o, _2 b- 4 ] `2 F' b- R$ m+ X4 }4 K
- s. `. ^5 n! ^7 F1 U( H5 a
3 b) j4 {5 a/ ?" p- ) I# y/ G- N: _. h- j
; X4 |- _; q( y! N
9 [% Q. _! R2 [' d* C0 ]
######引入库包############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()
* s$ [! T$ j+ t
# d! i: }) i5 a$ z& ^
9 L. @5 Y+ n. U6 ^% @6 u例:线条的透明度和颜色不同:
0 b7 S# h3 Z" `- 8 y! @5 L2 r- C2 V
# p5 P) m# O$ o+ k( j# B# `& v- ( @. H9 ?- i5 e/ g
5 }! b7 J* Y. I W% I) X: m. A
3 w2 g. h0 W. ?" W
, }0 j4 G+ k) p: o- . z, c3 r, q3 q! ]" I4 U2 i
- ; \0 c: z7 Q+ Z/ e
- ) q" U o' L2 F1 s+ Q3 M( i) t* }
- s" f a, G; e# N: D! n
9 f: j) x8 o# n) j& j6 y n A" {- U6 X: b( d; A
/ m& E( V% [3 V- ! w! Y9 X# [. k
- p' _" x+ O6 ^# V' ?- T
! \" j- N+ o' s! T, d: _2 x/ T
1 w$ x5 I. H0 k# l6 v
1 ] {: @$ a" i3 N
5 v/ W! @% I4 Y/ x3 z
0 l5 v6 a5 B J' V/ h; c# |3 ~% t+ ?0 P# u1 B# r9 H4 x
######引入库包############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() |