|
气象数据可视化主要依靠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("···")
: }- S5 Y+ V9 c3 I" G9 Q1 M
只要按照以上六步,基本绘图没有问题!!!
^/ Q; ]% e2 a7 d! f# E& G$ N% e& c k& y; K
绘制简单气象数据图
, C$ `+ x0 T4 K
( m. E& M) W* I4 t1 \+ y9 _
/ p& d0 y1 ]6 y, ]' y2 U8 ?$ v# J- " b# d. V) G2 c$ U) r% L3 N
# E; W; f5 v0 Y8 g# {! B
7 V2 c, ] L+ F7 z: B5 F$ {
4 W# s3 J7 |$ i; N/ |
" w; {0 r6 J1 b, A, ^! v3 k7 e2 ^3 H
( u: s$ b v' ^) v% V c9 I% w
/ R j/ i# w: u0 q, p/ P: d
M! T' [. G$ k5 ~& S. I) ]! x- " b" p, k: n4 N7 x+ K% H( E3 q
8 G: R8 b6 y9 Q, }: {: A+ G
' B3 {6 I; w* j+ Z4 ?6 U
" M& w! {5 T C& ?+ F8 D) 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("画布")
0 w8 a% I; B& v. M' L- l" t& v+ Q
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - 0 o, X( C' i* g) {2 E
$ G. v1 `' \' x: ~2 R2 c4 R- b- V! ~7 t- l+ j( Z# r: w( L: x
- , q: Z; w6 |; \$ x% p* d
u9 L; q* F+ K# d5 _! O7 k
6 V. d D& J1 b6 g4 h- # m& J! V }. L, ^2 t, G! g* `
- : W1 t& q* u# v# m" D C; u7 j
! y6 D; T1 D( c% a, c. v- A1 ^$ B! f' A" p; e
- & E) D: @& l9 g1 D4 Y! }; K
3 q: Q+ T+ q% m5 {% ?) C9 C- Y$ G
/ c( ?. ^; H2 B8 ?- " {: L7 F$ p" F4 b
4 S1 q9 F0 q) N6 e- 6 L p/ w7 x P2 ]! t# n2 ~' t& L
- 4 _4 `6 `) D" ]2 B0 O$ L. f
" B" s: ~; A" @0 @+ K- 4 Y3 c* ^7 S0 u H: n' Q( ?
3 @/ E* T* g+ [# i& i* P/ K- " D; t4 j N5 a3 f- \2 q
1 q& T2 z T- [ z% F$ Z1 P- - B: b2 e6 u6 k" Z) u: t' }9 S
- \1 d% e0 S) ?5 {7 d2 ^
######引入库包############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()
" X) ~& l- A+ \' d; ^" E: _
8 F; F1 M/ A( f3 U6 G: w 1 U( h7 e7 Z( A# ~2 q1 ?; s1 I
例:线条样式不同:
; `5 o& \, ^3 t- " W' q8 V1 a1 B# i
- + ?' J5 j2 |+ ~8 D+ ~
e4 F3 u1 l2 V; o+ E6 T
+ h; z. u$ t5 D
$ q) Z( P, {- P7 `. A/ [- + y+ p4 w) l4 ?4 z+ h$ |5 z
- W9 R; F! b5 K0 F# p! [, m- r+ X- * S9 p/ p7 K1 l) d6 Q1 g1 [: g$ W
- ( d9 z; @' C9 P1 Y! b
- ) F$ l1 ~) ^+ b, t
$ q# [( Q) M4 X# f" d1 Z0 J7 R. m5 h
: p5 c% [, b( u, C# h" s- @0 ~* |- 2 P [! P4 i# G4 g
4 u( T1 @$ b( R/ Q- ) e7 C) ]' u3 n: s9 C
) C) }3 @1 L ^5 n" A& H- . i% H2 P& X& H5 f
- ) \5 U i) x2 b4 q2 M4 ?& Q
- ! W& @: V9 X/ |3 p: _' a
! I0 a" O$ s3 ~) ?2 k+ | C, e& H- 3 o& n1 i0 i+ |/ B0 ^: O) ]
2 N5 b7 U. }0 q# A$ S$ c/ 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()
/ D6 t+ V* q; E! ?6 @/ b" n
7 e% i; O, K$ R. j; G9 u4 {5 d6 z
- G: `4 f6 e k$ ?5 O+ c, T例:线条的透明度和颜色不同:
- 3 J1 D# Y ^" j' K
- ' s3 U& s& h" Q4 L4 f# F
- 4 }4 _9 I7 W4 i! L( M1 n. M
- " n: g( n4 W" X/ [: p
0 v! [* V: Z5 [$ t6 s6 G6 E: s; h
7 D6 E0 s; v/ {1 z. {
# U' d7 J% U; c2 [- 6 Y. q% M1 L& ?2 j5 ]. t
- 5 X9 b: \5 ?( Z; V
& K1 J' A' e- y) G0 X- + w' Q% Y5 L/ O% R+ T8 O
- + Q- g5 R2 r w* ?( E4 d
) S6 j! W* i* I5 T* }# d4 ^
- l5 I, U/ g$ o+ h
9 f2 a1 m* C5 D c3 E, G0 d
, ?6 E U3 x$ X" X# s# `2 ^0 K& @
* R& N/ M& u2 M* Z0 Z2 \6 K
6 |: X) B* B9 _( M' G ?- ) I& E+ @4 Y% [) ^: A( j
- t3 v% H( W6 }% f& ^& |
- % L) u4 d1 s! ]6 w4 i( @4 A
: X2 N; L( B! V+ [, O% ]
######引入库包############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() |