|
气象数据可视化主要依靠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 v# a' Q. q4 q: A
只要按照以上六步,基本绘图没有问题!!! / g3 z( d) L4 j( J* h' y' O
Z% v o2 C* i9 v绘制简单气象数据图
( c* B. G" T0 g9 _" {1 Q0 G- & K7 X1 a! s2 p$ ~0 G' ?- ]4 i; J
) g9 t, q1 ~: b/ c7 \
4 }# \9 ~8 }7 o: O- # ?3 w' [, @! A% e
- 8 v' M' c/ T( c! R* D3 M+ @
6 y6 K, I3 F: ]/ W* x- 7 [, [+ F0 v2 B2 ?6 W7 m
- / o% U" ~0 ^, \" J
# T: D; S( d8 ]$ u- T g6 b- % X G4 D/ M4 D* ^; I! p! q7 B! B) E' O
- * k8 @# N4 s* U8 z6 e
- * p3 H* ]5 i2 p9 w3 X. r0 R* j
1 T$ Z2 W+ r$ E; l" ^; K/ H
- w+ S! V \1 I6 D6 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("画布")
y# _3 x2 F' E x8 v6 A
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - : ^0 f, q @& r; e
- 5 ^: K6 H+ T+ ~9 H( s
- 5 E+ u7 S1 A/ U+ ]
- 9 R* P+ N8 J" I$ b1 t6 w
5 |8 D" u9 X1 G9 j1 \# ^% `% i- / [% p# I# W0 t! d) c3 D1 {5 ^
- ' H( [' a( @' o) q
/ I+ o& p% P( H( C1 O3 S6 W1 M
) F9 L/ G2 h1 H) f% S/ f# _- - B% |# E3 x. m. Q. w6 x
8 i* |2 c' L8 |, @: J1 ]3 l: @
. k7 {7 ^8 X( g/ F1 o
H+ S# Z- T9 p! n3 J3 H- 0 E6 q7 x* ^" _' }6 [# C) |
( v! Z8 S( w# r3 N/ j
# p ]8 w) ~% w; X- * S9 [3 D' i R
- & `( A h( n6 g3 t& A( g: G* Z
- 1 h6 H! }6 o3 s
- # j& n: c; r# |3 L9 ?
1 t9 G0 O) K$ G/ P- 8 d" ~ L& O* _: T4 z% n
; X; N& d1 x7 }! ]
+ P2 Y- g+ a' |" D
######引入库包############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()9 Z Q* O7 H& S! X
' R' ?& P/ t( |+ I, H3 ]9 l* j
& m$ G; P* ~. N$ }' o; u+ |$ w例:线条样式不同:
y& X1 ]8 X, U& R7 ^+ K- 1 ]. y' J9 {( A$ C& f, J4 L
- $ j: J$ ]0 m9 z6 L8 c. s; K
0 C- n: F$ h! V
+ b) D, u2 X* C) J$ a+ w- 9 ]: t! j+ _% `- [
- D2 Z2 V7 o" w
- ' F! B2 n3 `+ r: {) ?$ z2 L4 a
- * i+ l$ o. z' f R F% c
7 d2 a( h* L- D. c" n/ }3 ^0 q2 h- $ n1 V7 u# D& E1 h5 Y! |1 k# f
- |/ z9 i4 J. Z( g
7 m, Q4 Z# Y G* r8 G/ ]9 c
n4 q/ a# o" i! ^# g- 3 P; y5 H( b8 S4 Q9 q- Q. [6 u% P
' L9 f h/ Q2 r! k1 k- ) t$ d/ b- V! z+ [/ K
- 7 h3 L) m/ Z/ K# E1 v9 H- V8 `
6 A( n6 J' r6 q9 i
5 u( G& L! P9 }7 { b$ c- " W/ }8 f4 C* j* y4 Y2 ~7 j4 |
- - q4 p* R, I/ i7 m6 `) v
; T2 a( S& P* n/ a4 o
######引入库包############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(). A# G& X4 w& H, v6 @7 W
+ Y. {; v0 P r6 W6 ]( i [7 W( U P1 }7 z
例:线条的透明度和颜色不同:
- : h4 Z$ T! ~8 i9 F
& o+ Q! H( ~( C* e- G
1 i6 |5 T; l* z$ R
1 D, T& w9 ?& }2 M, q4 X& d! C( F. z- 6 ?9 |' A5 b# q# Q3 m2 N. e+ b
- , x7 P% C. `' w6 Z$ C
, {- A U" h- Z. [
4 o; Z) Q; j E/ J* C0 y8 q- & E& L5 ^% O) r1 c2 ~
- ; D h! v, @1 Q5 B! P
- ( d! V/ ^2 j" d1 i' W% c
- + o5 q8 L) a0 ~( B8 y" ~( R
- 8 U f3 B( y& ^7 v& M) [8 d0 Y
- 4 r9 c; U. o1 ~+ Q9 J" u
1 V; E8 M/ W$ U* M& R
% w# l; D: O! D; j. f5 q) {8 u- 2 ^3 D( J1 _5 x/ F
3 {9 }/ `* p8 c' t [$ f: @1 ]
2 z% J3 n' e- [8 }- % B" s9 h% {/ _& X
- ) ^5 S, O+ W8 v2 D- ]
- V9 U2 d8 ~) i. L$ S* C% d& k
######引入库包############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() |