|
气象数据可视化主要依靠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("···")
: Q" c" I* b# H! H/ O* |
只要按照以上六步,基本绘图没有问题!!!
( @1 U. I3 ]/ J# q6 {6 P0 n
! e* h0 I' J/ o7 }4 E1 X C# B绘制简单气象数据图
3 u& [) }! u# h- # r5 m' P; D: _7 B$ L
- 9 S1 O+ A3 `$ r
# q$ C7 i6 t( Y" q7 h; L% M- # |3 [2 M) k! L' X* ?
& K! T# L: _$ {" G" i( J+ U, X m O
" i0 E4 Z Q7 }9 s) O- ; F( H' u- k0 _
- 5 ~2 Y5 |' \$ z; v
- M3 |0 h5 t; z! ?
! b: @7 l' t9 q' {* E- ; b8 a/ c" v/ ~
" \+ q4 p' O6 z7 u
" a1 |* W M8 [, ~# F. d) f5 O: g* f+ z
######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("画布")& a" e' f, |* a, F5 d$ q
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
7 i8 e0 d4 N) R& z; R: ~1 B5 P- 8 @7 Q3 ^2 S B2 F2 D- u+ J
% D: P7 Q8 u/ b, h2 Q
* S- Y% V8 B' n& }; w
6 q0 A- K' b# E: A/ }7 G
2 k( c* r) h8 r- , }( s3 S5 \" o, l3 I; U
- 2 S# {5 S. r4 A- O7 y/ r9 W' {
- * |; ^2 n$ B7 \% a; L) ]
- , B2 Q" [ [7 S7 N) p
- 7 A. a$ c3 F6 T; z3 X/ M
- 4 G v( S6 p7 C1 z. j. w
- # d6 M: J9 u" h9 O
8 Q( o/ u$ {8 J2 K
, R# P6 U) b% f2 ] O4 H( \- - H3 r* S; s: U; s0 T$ n
: L5 f' `4 i ?0 v+ A
1 Q0 X! @ K0 d& G" _
: Q8 g8 D) e# Q" _8 t- 9 s$ l3 q3 v' D$ O- X, Z0 r" i
" e$ ~' r! x- ]& e
6 Q: N0 T" @4 F! G: N/ ^8 s. E, }4 O
* X. h+ s- p. t( W0 ~2 \
( o- N' C2 N+ k+ q7 w) V
######引入库包############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()" S: s+ }/ D: n* G$ U
9 z9 s& y& N4 t
) X5 S7 C" c( c/ b例:线条样式不同:
- 9 f E7 i3 i: e s' T
9 F& [- i+ V/ h/ S/ v
0 ^0 m* I9 x: z# G4 p/ p' o/ c- & y, z4 P6 E( S6 K# H
3 d- `, K* X/ d* D
$ Y. v- B4 w4 ?: I
$ d9 h& l( o) D- 8 N* O3 Q1 q1 R. O
: k+ _! |7 m: ?" |8 A) M
5 x1 u! y0 t1 g& ^( P- 0 P. O m) I9 y! |# f
- 2 `, @. z+ Y, M! E; C
- ! L4 ^3 H% x, O# h% j: _* g
- * V! O$ c. m! P/ x% ~: s9 G
, W% m% V* q2 f( U. D1 ]
# A! E2 I1 f& P A/ T( Z
' r6 o7 Y- u8 j' l. U- # ^ X7 U! F8 V) h) f
! E5 D8 x, G+ Z; o
/ x( j, d# _- I. p- v& s& a
& q1 Y# G/ [8 P% ]9 R9 ]" H- $ W V( S) s1 S* _
6 b! r3 @4 v/ O) f) m; H
######引入库包############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 u3 B+ d9 [& f) X# x
; J8 ^& I/ u! g' O- x
3 ]% T; x3 c7 y O3 k6 n例:线条的透明度和颜色不同:
4 n5 e: A- Y( Z# s* \4 M8 Q# X5 H s- 5 C' Z3 ^" S/ z5 g
7 x: X* A7 p/ m) S1 Y- 0 ?$ n6 G8 u8 [) {: F, S' S; b
- 5 [" E, `8 R6 x1 K& R
- 1 [. t4 X4 H) Z! H
. r. [% |6 X% i) T2 x \7 k9 Z
, B' ~$ _- [( A1 h' c# n- , x( X& O0 e& N. A& }4 D
; R( o/ C Q! B1 I/ B# \* Q( A
" }! h( k* L; r4 u3 n
9 F' f1 G/ ~6 _6 w# a- R2 L
) p; d' X b- x4 S H- 9 I0 _. {6 [3 [2 o1 k ~+ E: v! v
- O" l) ?9 c. s9 Z5 j: W
- - t' N/ n8 N# w+ ]% K M: |
% k6 \" w9 E) {4 T9 B4 X, k
, N6 U0 ^0 B6 ^5 J) X o" t2 r
M- ]( d% W. x( E, G, a% W- ~
+ f$ g, |1 W# I( ~1 `- * |/ q" }% c8 s* Y- i2 z- o; b! O
& H& W/ E4 i7 G; k9 E7 k1 Q# 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() |