|
气象数据可视化主要依靠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("···")
% g! P. W! k% Q; T1 c
只要按照以上六步,基本绘图没有问题!!! / j' w8 W" j, h: u+ k; r
& w. c5 n' F4 e; V绘制简单气象数据图 - 6 f# u* Q5 ~1 q6 o) S8 e% t y6 I7 T2 E
1 p8 U+ U9 P: q
( B. J! B8 [) \. F/ v- / j& m7 H0 [1 F. o1 Z
& t( t/ U; P8 R& i
- `& P" e" |2 W) A7 [
0 m u6 C$ L: P
& l) f/ a3 h/ N5 b" ^- 7 s5 f' E* U" `
- 9 {: b4 N- x; D# H, {2 @7 R
- , ~& J& W7 F8 T5 b# `
- 2 H; w& w2 R8 j+ n2 d; a! O, P% ]
1 ~, k3 D$ U# m' H" [+ Z( [3 A- ; S0 ~0 N8 P: _! Q _9 _% S
/ h Y9 w( B) Z* f9 o9 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("画布")! z# F- F, ~8 L" l
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - 5 T" N- \9 I- H9 |6 W2 c6 v' G
- * E. E J! x( D* O+ f% W! F
- $ Q; I7 m) z1 h
7 W% K& { h3 J1 F
7 T) D7 `* }4 Z3 f( P
+ R$ L3 N# C' s# C2 s- - o' V* G& _1 h
- * J' I( C. x2 m" O8 b K% v
4 q! r$ M) n% j2 e- + V; }" V/ u R3 `# Q" a5 B, w
- % i* y5 Z# { }9 V* l' `
- 2 l8 p* |) t1 y4 r
. |- W# `# V4 R7 L# w6 x- + ]! x, ~0 n) S( \, ?
- , i6 J7 R& q* ^, C, l: I2 b( \5 V
- ( r, ?, j0 k, p! E; o0 O- B* a
$ D7 W+ H* [( A- 6 l1 }1 Q; m |4 I+ j2 g
- 5 h& a! a! R9 }( E( P0 ~
* m4 m% }4 r S& ?- # m) g. N, v% {, U: ?
. ?* k9 e) @% B V k
9 o2 y L- ]* e# o2 w% ~/ S8 V+ Y* X7 r0 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, 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 Z* L, I$ l' ~+ X' ^6 y: R
5 t" j$ }8 K, d, p3 |2 r/ D
) e# W6 s$ u/ j/ W
例:线条样式不同:
- 3 ~' F; F4 z, n" u0 V+ u0 ?
l3 G0 H. y+ g& L2 L- ; _9 Y0 a& l1 H1 B* C
' h# H; P* D2 M/ o# H- : B B8 O9 n0 y: w: i0 U! t1 h
- " i2 }+ m2 u6 ]! u( |
- 4 ?& _5 R# ?$ T
% C8 [ }6 k, E% e0 V3 ^
. \- F: i; d+ W( d: d* r- 2 |& H! J* {% X
" ~# q( \' H1 \0 D S% P- 7 S, c5 ?* i& B
- & @/ W! S! z* p9 A4 V* R3 ]
' v5 b2 t; f- [: t( z. g
" o& i6 T1 y! v0 X
# z7 w+ t' v; H+ R( m4 O0 L) g/ V- A# ?. M
4 [" {2 i1 Z% L! c+ U( A' X3 F- ; {( m0 o( V$ @% _! R
- " a0 h2 |6 i+ e
* Z2 F2 u5 f( y" T- ' R! \' _! B! p( b! X
- % E( b/ o8 w) ?6 J2 }% O+ @
, J4 ~% g2 h, g5 |% Z$ n. |! v
######引入库包############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()* n7 d7 x5 L% q; K4 B" f5 `
6 [% f C1 P: a, K$ ^
* C1 ?, [3 _% q
例:线条的透明度和颜色不同:
- . X2 B2 m# |- C( D# t; @) s
- 8 C! |7 z3 n$ x h
- 8 K2 A, V3 h+ I7 |8 v
* s7 I* @; C. L6 o
" Z1 `, \- O( p% V8 }/ D$ q
- a2 E" t7 Z2 U4 ]. s- ( [4 o+ c7 s7 i% H/ g$ n" h
. t; v1 n4 J+ ]: d, u# q) M& j! H- 9 K6 e5 Y" y Y; @: W3 ?
* P& P4 s9 x+ S9 d# ~3 O- . }: S t/ t l+ e( m5 q
3 \- B( {. R6 T$ K- i( o2 |- $ [$ C. A/ [/ ?5 m6 o
- 4 h$ f) H9 d X3 ]) D
- ' Y; s* {( E" y9 o
- " A9 A$ S- o; A' v( ~
- ) j$ ~* h6 M1 m1 d! T5 y' m# z
- ( m/ ?) J2 p/ ?
- - S8 X* g5 T# M3 y3 }/ p0 p$ j
- ! E8 z# t) E1 _8 M
- ' ?5 p2 _* Y4 b
7 N+ r( y" e7 ?8 d% n
######引入库包############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() |