|
气象数据可视化主要依靠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("···")
' P6 ?; {- D9 `- ?6 Z! w' X
只要按照以上六步,基本绘图没有问题!!!
* U# J3 m% M- V+ m3 b5 q j4 u) T4 c7 L
绘制简单气象数据图
. S3 P1 V5 Y N6 }
Z- d7 [- J2 u' ^- 6 V1 M1 V3 \5 z
: @+ w6 [9 o* v- 3 x2 H5 B/ w7 q6 v b% x
4 v0 y R- [5 j8 P. ]) a o- 9 F; U+ o `) Y7 s5 k3 Y
, }% A( m- t: ]8 I/ m
( a0 |& o l2 z5 y2 f6 O
, p* ?9 j8 S v- d1 g% e3 p
* T5 [% i4 s5 a- A k& s
; O& n+ d6 ~+ D- 5 E' y1 U6 E# W$ c6 Y- A
' Z( ^& X g# }& `: \# A( ]5 N- P! r* k; e m! |9 ?
######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("画布")6 O6 f& u1 h- u$ b7 h" V; \
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
`* F s2 L7 q1 Q) `5 M! T
( n5 g+ K$ A }" M+ S2 h
+ j1 r- B+ ?9 L# x8 w- 1 f! ~9 ]- @* u' F' m' |
- ( C. a/ T) P' @' z- C6 L
- . f w5 ?( A+ E: k4 [8 `
& T7 M9 s- N) Y2 A2 W6 @0 ~) z- z* b3 E1 h: z: O. e' }( W& p
$ W3 D2 k: y: j# |4 b
& @5 v* F+ [ N4 o4 ?5 y- y% d
$ ?. O4 d, U" }8 c+ I9 T& n
& ?8 W5 y% z# I3 G' X$ W8 B, W- 9 g! G5 g; q1 e" }
. }, M) E5 O8 |: W5 Y I/ Y& {
# ~; i/ _5 S2 g+ d
- n& u# p6 m6 ?8 O
' R7 H' p( Z4 G7 Q2 c- ; F' S) _2 M5 V7 {. Y& W5 q" ] o
- * J. _# R4 q6 o4 A' i: s, g* A
- 9 [$ c" }8 Q( S3 v/ V
- / ~, |1 b2 r1 ^- B# O& N
9 E7 K3 O4 V. ?/ ]8 x
* @4 u5 a5 B, Q/ l# d* U9 k: s. d! a, W3 j0 g/ R+ C
######引入库包############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()
% i H' {3 C# H % C. x* `1 p- r2 o2 B7 f( S0 a
$ e# m/ |0 t* o1 [例:线条样式不同:
- 3 @( n9 V9 a& _+ w0 @
7 Y4 I( ]5 d; o/ x. v
* ~7 q* `7 E- D, q$ s
- G8 _3 K" U+ f- . ^/ L/ ? y' \. K# ~% s4 d
' H/ J# K3 u6 |& w/ U, s
) s% a' M4 a# {
0 q( G h' d3 E/ S
* u- D; P( G5 A! \- |- 7 Q: T0 S( R8 W+ @# K
+ f6 A+ Y2 S, s- v/ `( `& w( N8 B
9 W) U- l7 G3 G' F$ `* k- e9 ?0 f- 7 ]: X+ Y+ w# L; d
- . h+ M& f+ R* q5 `8 h% z: R
- : Z# g5 S$ ^+ p5 C/ j) d& D B+ ]
$ g$ n4 H4 ?) e( e: Z: J: @- 4 K. t, l2 v7 ?1 q3 N
. _/ X F2 z% Y0 _7 A
+ A( P8 R m2 v1 C0 e
1 c. Y% {5 e3 g
j3 a' r2 o, v8 D4 L
/ t+ {0 z# l8 R/ [2 g- f" V/ i" c8 L2 b9 W1 b
######引入库包############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()
) {# l, v7 L5 S8 t* s' ]! i , `: h% H) n9 q) K+ t* U
0 G4 G( `5 K* b- v
例:线条的透明度和颜色不同:
3 P6 v* |% ~2 b, L. E' W- $ X8 a- I H) h# a) q
- * z* y: ~6 Y. y
- h' i2 ~: u0 f3 |- , ]% ^/ } U0 x8 n7 ^0 s" W
" E( a( \. Z/ v- ' y: h& A1 e9 V" c) c
- ; H, ?' p" _' O* R' [
- % X7 j3 ^5 {4 I+ D, g
) K' g1 S- p3 Z" l- + P/ }, @: ?# F/ K
- " L+ s% g$ u( r) w" T' O3 ]
4 @. G9 `9 `9 }. ^' x: [4 @: W
& F) G1 S& t1 T% S# K( B- 4 r. _( w* c" z/ E& ]$ O* a. Y
3 [4 K _, A$ S! y/ l- + [- s6 h! D" O9 |$ K
- 9 n9 y, ~) B: Q9 I6 r: P6 s; U
- , a. Q# H, W6 p; }8 Z" t$ o
- 6 [; E5 j! ~, U- \7 ?- i1 d
- h- B$ s1 g9 e0 e4 m
. Z8 z/ T0 Q5 p1 T
######引入库包############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() |