|
气象数据可视化主要依靠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("···")
& v/ ?% { v3 ?) Z
只要按照以上六步,基本绘图没有问题!!! 6 C% F$ v8 J4 {. X/ |0 ]+ [6 N
: l0 B9 F4 K# k绘制简单气象数据图 - ( W" B* ^% B7 y% f, q
- 2 L- G Z* T1 s2 o" R( @1 G
- 1 n. `$ z4 w% W, k6 Q
% W: j4 Z3 E7 O- W3 q: r
% O* M/ h+ u- o3 a" J# t! w- s5 V+ x2 r Y6 d* e3 y
- ( i& o+ S, W8 q& Z
- , k; _/ P7 [+ k: [0 I4 H8 s+ E
- / _9 d- R$ g" D
0 X$ B/ e7 A/ S d. O2 m( [
I# L2 u. F: {. N* K; |* B- @8 N- ! q }& j$ d: B c7 t7 I) g# ]" C
+ |$ V3 [) r6 I- t- 6 p% F* _4 B8 \ o! J( g
" S7 D, U0 t6 ~
######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("画布")3 ~% |/ n1 H% K- H7 P; z$ V h
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
; y8 c5 w. T: V1 b2 P- % Q" m& U' f- j7 i3 _
- ' m" G& Y. ]& f( o
- . y+ S: P0 P# u. U
2 [" u! b! N0 r8 A5 d, m1 v
0 M J: I7 @4 \& `
: [& U3 P0 w" ~. F: x0 O0 S
/ h% U8 e! i) ^% K: c' R. o# g# [9 e- N% X( N$ v- J$ [# e$ R& G
% |6 x$ u* p% ^5 |3 y0 w- 7 B5 i- b$ v3 F V- R
- ! G3 @% y7 m% t0 |5 D) x9 U
- ` Z% a2 c8 [# y1 P- / f) j0 w f) B+ `1 J- A
3 Z" |: y+ @7 l8 C/ i
& x) N4 ]0 }# N b) }
. u, f4 V/ A' s7 s d- . L, i' e" [2 u- [: r) Y# L$ j
& d2 V4 N9 {. ]4 V" a- {. M# r- 8 f2 D( ?+ P- l6 F6 y& F
/ J1 S& j& x2 } g7 p* d, l- % }0 I5 x% C2 Y6 e6 t" l6 V8 f; O
$ E0 V* l! Q3 T3 S3 ]* O, Q* B. ?0 {- |! ~$ I; Q
######引入库包############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()& v" x) m1 \( g* ~' d7 m+ ?; D
) K/ _1 |7 Q0 v2 E ' u' O4 a/ M0 W: Q q
例:线条样式不同:
* D% \. T4 o+ ^; |- }3 e+ s; b, y1 s& n& q% @
K+ X! X0 j% \9 d
0 y; x o# u$ p$ Z7 Q3 K, Y/ q
5 G/ N# i/ c+ n/ M1 R* \$ M5 \- ! j- Y. c4 c* r; |4 z, G: W
- * A6 }/ Z% _' Q6 t2 V/ G
9 Z1 {/ `5 {9 G3 ]% o- 6 X# L4 U3 x2 V% \ X& D
- - U" A+ O: {$ N
- - a2 a- U1 ]$ S6 b. o/ X
8 u- S% J" F9 ^) q
1 @; V5 E# F6 r# _7 J; o; @& I
4 ^7 }. c; b2 s$ e' L
! u% q) x |: |6 Z* Q$ o- 7 _+ h3 M- Y) L4 ]6 P
- 8 c5 p. ]1 B4 w( t
2 z @) u0 I7 z9 y. G- 7 |$ E( y9 q" Y, L
, {7 Q, Q! ^- G
- d$ K+ O) X, x" g0 @- 9 C3 \2 V: j7 B7 v1 k! v+ X
; P* S4 M. Z& o8 B0 K
######引入库包############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()
3 W% H' u' e3 A9 b+ U: r! ~ . _4 S7 d$ j, k+ S+ P7 P# M$ l! _
w0 \( E& t: H4 Q) a% y例:线条的透明度和颜色不同:
6 T2 G8 [6 H1 b {# h S1 v2 @; a" _- ( H2 q2 p& M( x
* D3 q' f* Q9 C) ~/ i- * x6 d% S% G) K8 K ?6 q
, ]; w3 t, ?+ W8 X3 O# Y7 y- / I5 E& H& Q# r* ^/ B& L9 ~8 [
- 6 N& J' o$ m, J/ _
- , P3 x3 U9 y4 v' D
7 I. ?: d" } e. Q2 ^- ( h5 G" h( P$ g9 S$ p3 `
1 E* M# D% h% d1 q9 y- / s5 e1 @1 p4 z6 t* C
" ?' J" j) Z$ l9 J2 m- 3 {, k4 [) B1 {$ S# T
- 7 m) g1 L. Y7 R) a3 y+ k
- 2 E* V, g* p: i! K' J
- . {" h5 G( V" @# n2 O9 v$ y
- ) q9 X3 L' |( @$ U9 }) G" W
. I4 @! J: ^: T S/ J; s- ! u4 m8 ~$ S. z+ H$ w) \- h, E3 Z
- & R1 L1 q7 w$ q% R
$ ]& [: V5 N) S- x5 i7 C6 G+ p
######引入库包############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() |