|
气象数据可视化主要依靠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("···") " A7 v7 V# I7 j, t) f
只要按照以上六步,基本绘图没有问题!!!
( Y! O" S$ x8 `- v+ [
& V# n! L, k9 C; J绘制简单气象数据图 - 3 F& a+ r1 t; Y' }6 K" ], j3 v
- % [9 A0 l' o* H7 A
9 [5 ]+ x h* w3 C: k+ K& G. f# r2 q- : r% _$ b" Z: S3 M& X
+ v, d9 S0 g* t/ p0 S9 _* L- Z9 _1 m7 _; S, @
' Z! y) K- ^ O+ V6 S ]1 e+ d
; K# g" q! z" g7 ]9 o3 d. f& Z+ p4 E- & p9 p* u- r* L8 i! g" x
- 9 H1 T4 ^. `: i" w
- ; e. a' @- v8 U4 f! d7 X5 n
2 C b2 Y' _, v% q: L- e# b- + A1 r- x9 T$ C2 Q0 T) |
1 f2 w/ f V6 z4 [/ J
( W+ E% o0 v; p/ S. u2 S( T1 c1 U! N
######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("画布")
$ Z8 Y' W/ o* z6 M8 h
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
0 u' Q0 d! u, f" g) f) w% {
" }8 g' M4 J- `1 |
, L* E# Z) b" } [% E0 d- ) G9 u4 q# u% S5 B5 F& k
- 9 z: F2 N* T$ Z- H9 [
: u/ j% H5 [ z- . X8 h0 w4 Q6 X/ I
6 V' O- ^' j6 f5 ~2 p
% k, d t# c% J- * f7 m' C# f6 m u) F
! X3 W# D6 s6 k2 |$ _6 i- . r2 n2 e, T0 K
- % K! h: G/ X2 a" X7 w6 I8 x
- 2 y$ V: v0 |/ N+ |1 A, V
* W' D( W6 a3 K4 F! O b9 J
2 C- [9 a& k, c6 j
( c6 f3 p$ O8 |" A& f
. I4 j/ ]8 E8 U! f0 i9 ^/ }7 S }
# [9 g! D. J) x4 \- " c w" Y4 e- \' j o
/ n+ @& c+ B: w; o2 W2 W4 M5 L9 a( D- 5 e5 \" T& B" b6 L9 T+ ~% _, Z
- $ H7 q+ Z- X1 X
4 E2 [/ t6 d( D, F1 h# [6 L$ B
######引入库包############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()
- P' ?8 \: s7 E" \0 z5 U . l' j1 |% k0 k0 ~9 x. \
$ ^( x) Q- \3 u4 N
例:线条样式不同:
( n& K1 s, r3 j' k6 g$ Y- ' Q g8 I& V! f# ]( g$ j5 X
- 9 v& L( b& I8 y8 x8 `/ D
- $ a6 m: U& s9 ]- ]) J
- 3 D: l! Z, `) q+ S/ G
5 p8 C# J* Q+ O) H
! ?$ W p; r; X3 Q/ H$ O
' m4 b3 }1 R% Q1 M6 O
' S5 _$ s2 f7 X O- / s6 ^4 i$ d# a# F# Q
( X f9 Z$ m. ^( {" C: M
2 J9 w: Q# k" c+ V- & \; \/ S) y7 j; a+ A
5 k' k+ E8 G4 U" `9 b- a& [- * {5 |% x' J x3 R
- ) `* I0 C# G% I2 v/ w) x- m
- ( Z' b7 p5 V% t6 o6 u6 A
, y$ F k- I; J3 V+ O& B8 b) C- 4 s7 H( W, p/ ~1 L/ N: T" O
0 h% O; l/ G4 D5 g9 R
( `4 d! k& h: E- 8 H( [; [9 E8 m. H
5 M) Q0 C& }9 c* p1 u; W
######引入库包############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()
: |5 T+ U/ f$ W( O , e5 a3 H. l- C$ m# b" R
0 s( ^9 ?/ `0 O! K; ]6 ~2 \( ~4 b例:线条的透明度和颜色不同:
- $ u) |# C' m& N# x! x J
- % z( E0 B; S) H- ]; S$ h4 ~
- & S E7 P& E! f, e/ D5 ^
, k8 ]+ O' F" I2 X7 U
& e( s* t- d: ~7 G# n- . ?3 P) `: h% \# Y# H
- ; L. G& `$ r% n" N( H9 |
6 I9 r8 y5 Z4 N3 H: |- * s1 G' Q" P# k! w3 i4 ?
' ], z( a' ^! z2 O% o4 g
( r+ _3 I; Z7 P6 ^1 g7 I9 e" V
% D6 C) c0 Z" @
. \; ^1 o/ D% M/ i( V! l- * r8 b4 y5 l/ T7 i: q# N! a/ w
- h- G5 z( y. Y! y$ r% ^' I
8 b# }! V( c# v) ~
3 ?- [8 N$ w+ e& ?6 r6 O3 v h
* l4 X. M( e7 r: L- 8 G& K$ _" ~2 h3 M/ U# D* _0 L
5 t8 J: U; O" y( B: r" E8 O' @- 3 E/ }) s3 A1 P# Q$ _
0 I( f) B: X' k" y* E9 M
######引入库包############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() |