|
气象数据可视化主要依靠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("···")
& d, a( z+ r4 R1 E& Q$ d, _
只要按照以上六步,基本绘图没有问题!!!
/ @; u) F& y5 y; n# V, q) ?6 C" u! \6 D# \
绘制简单气象数据图 - + \" P d; S" @ X
* E/ H: P5 B/ V# p: k! h
- K6 N% F7 v6 [- 9 @5 S4 z* v: }) J$ q
* e3 w- d' _; O0 z' E( ^
. @2 s' i. m: ?: E# P
, E7 I& ^$ b6 I6 I- + t) V3 e. L2 ?$ v4 r8 R
1 x4 |4 x1 y; C
" E0 O! {2 h" _3 c3 [6 q- . r* Z: z8 O- q2 e( P
- ( n8 f3 Y7 M7 q" P+ w% C
4 {& n0 V1 d3 E1 B! ^5 x7 y) j* [- ( S0 b( |9 P9 E1 [: c$ x& \! `# D
# y6 [ t& k9 q
######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("画布")
; Y5 ^$ U3 p4 ?1 Q4 }8 G
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - - y$ E( ?* M u1 P# F: t, a
- , L& ^$ s3 {$ ]
) a" i/ D8 U/ r; N$ U0 a7 ^- . @# d( u5 a$ |$ M+ E8 S
- / Y! o" T6 K% R4 D( o. S: s$ y: i
( R& Y; O- j) m- d% K5 V
5 v W" C) c* Y3 }- 9 J b u4 R: l3 J- |
( j" I' b- v4 n
9 J6 h( P5 J' }6 m1 t1 s6 A' s+ x% P- + Q$ @ x+ p9 L. [7 B# t
4 s) \. l( @% ]! ?7 G! u
l! O# N5 V/ s; D
8 ~( U2 d$ r T5 t
( j: M3 J" {% C, d) G l
# x4 g+ x( I. B8 f$ C; q% }- ( \" s5 u M; w2 o0 A
- 4 ~: X4 O1 K4 ] e
# o2 X0 m5 d/ F/ K- l0 n; m" ^1 K$ f
. V+ _0 f. A* G+ r X- . B6 @( |% `4 y4 l. m3 F
% a& o3 Q9 \0 d3 v3 G' [* d# d; A9 ^9 d2 L6 P7 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, 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()4 o9 ?6 A' ^# T( Z) g
/ o, D4 b) ~+ F' B& \
0 ~' D- b, {0 {7 Q6 R
例:线条样式不同:
- - i7 A: L- O7 V! F( v2 c( ]7 ]
! i/ M v+ p7 t, O- / H+ R" M* v# L* b6 A) L3 B
- 9 ~; N3 P/ P V
9 m" x0 l( _$ A1 d6 P8 h- / e! g- e$ R9 q3 h- S) ]: c
- % Q- q5 [2 u; p3 N
6 ?; S7 E8 F+ `0 Q8 K& J8 w- / _6 P* ^( i) p
- ! b& T9 u) m! X5 r( d1 ~
1 H6 g/ t6 b/ K A! O0 P; g7 f
% }6 U+ Y/ o3 w! i7 ^/ [
9 Q$ }9 O s# A& @" ^4 I8 s1 W% x: }; _
! `3 }( ~9 K: g* a9 O
8 g7 w6 A1 A( `) W/ L% y& d M
% K+ M# C; c/ q6 f' ^' M
, b& J: s* d7 \* K. R. a& R- 3 O- W P/ r# n' C b! _- ~
6 T. [, Z2 n9 } M! n6 \9 I, E- % B, [( B1 }/ A6 c2 l1 c
3 x: {' T1 b* ^1 t' {6 s9 @
0 I3 @( s. n! F8 v0 u; O4 r9 n0 g
& o+ B( @+ c- T- l" V6 A
######引入库包############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()
1 N. g' R6 E w2 U
- W0 z1 m% |0 t ?/ m% o # x0 O- l1 B* F, A( \5 f( @2 r
例:线条的透明度和颜色不同:
- ' n( v c# P3 H
1 P9 o& l. x/ J ^- : a% a( y) N$ y0 ^& h
- ' e( Z6 [/ F9 g, c! U8 l9 z+ M
$ K6 H1 g5 k$ z& Z& K. S5 A7 V- ! L/ q- X/ }/ l" X) X% M
- $ B8 i `0 P8 x) e7 O3 T
- ) ~: }5 F; e' S& J! m
- $ M( s! V2 p9 c+ l" I( k
* ]+ V! b: o/ L, ], V
5 f& `' {1 Q' g/ F2 \- , z# Z4 k( A/ ~# B/ K, q f
- 3 L7 w' l1 d% M5 F4 U. t0 k
- 8 H' Q9 {+ G) ^; R4 w0 O" r
5 Y' O4 z# r3 B, `0 H- / d; j) E- N9 h l- ?1 T m! q; i
! i1 ?4 K" x3 c& v2 `& t- $ l$ \' i! z; D
5 P+ ^ f% x$ A* k9 U+ D5 D: x- 7 ]2 V+ W5 w7 {9 s5 o$ \0 E8 N
6 w( d! W& z% b- M; I
3 W- o F* I, |
######引入库包############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() |