|
气象数据可视化主要依靠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("···") 6 S3 A3 |# a5 S7 |+ G' ?, o- _
只要按照以上六步,基本绘图没有问题!!!
. S1 k4 l/ y1 h' q) ~6 `
8 r% J% m3 U& F& |绘制简单气象数据图 - & A1 O, P1 K- D& R. L
- . F Q: t( e1 Y% B
8 z& j p6 d% z$ y! g/ R
9 q' s! F9 P/ g9 X- " _1 N# U- U- c0 \6 n
, _' j) S. ]$ s* k9 Y J' T
) _5 V: o6 @$ s9 E' {
* \; z; e% a2 _ k" Q
% A% p, i) A. C* D( |- 9 t" j3 a! M# x( \# e. G
" e! \) n A2 Z6 T' `3 W
; l8 C8 E2 ^/ Z* [: f- # N( G- c1 @$ }0 o. B
- 1 i$ J% h% W, |5 S3 x3 y/ G: X: X/ f; l
9 _+ _) A" f) M4 F
######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 N) O1 k# u" Z$ y
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
0 l! p- `9 @' k) e4 ]! w( F% _* P
# A* Z' i' r: I6 V3 x8 I$ y+ T- % {/ }. n& p2 L5 J R
- 4 p$ i% F6 O) F8 B
5 W" ~* q. r; S. h7 ?0 j- z
7 Z% s* K& ]2 |3 q% {9 m# F; I- & P" u0 j+ g; w7 R
" c4 t- v5 }, G7 ^
3 w" C Z' y: s/ A- . l* E, s# b! d
1 t, x% u% d: ^. s- 8 E+ S" I2 |3 V. y6 c+ K
6 J5 F( Y4 W' l: w8 D8 y& w, Y
) u& J# |2 I2 o% d4 @2 X" g
# ]9 d4 V: e$ P& L# U4 V- $ G& y; r, N _# g7 l) j# R
+ E* ]0 \+ K3 R' p7 U: ^- 4 l/ D- o) {! j9 ~3 h) e
- 4 ^5 ?( J* |/ h3 ]% Y; d
- 6 M8 g6 ^8 B& @) o4 Q6 x* U7 y
- , K9 i' S- x9 X/ A; u2 Q2 H7 w
+ B6 _7 c% Q" Z8 P# \+ V3 l# o
- }; e6 A. H; X. r- h
: f: I" v/ X, 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, 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()
! b5 h& `: T$ J/ Y& K3 r' o ]
3 c) a8 y+ y l$ |: I" H, G 3 ?0 A9 E8 l4 G2 I
例:线条样式不同:
- 3 B. a5 j8 t: t/ N0 _: c; w
- 1 J3 |- E( p+ u1 g& C
" ]2 c! q- ^6 ?, q5 d% C& u
~+ m& H( e: f
- ?7 E( C3 |$ [, R
2 O/ H4 r6 P; f c' [ `- u- 4 q$ ] b, Q3 w; p$ B& h7 p* c
5 e* E9 r( R8 e0 }3 q
6 ~: i* ]$ y' ^9 _- % A" v; @: Z) U+ K: r# C
- % Z- W3 d8 V9 E* r
. A1 E' d2 y7 ]4 ~, y* U
5 @) o0 o# }6 ^9 t
. \, P+ c+ L1 D7 [
3 q. u8 s8 J2 H; a m- K- 3 l6 o u8 C$ Y9 f6 [6 H
" R( F- m1 N# w8 `, J
) U7 R- f6 f9 ?- l( U- a4 J8 ?# m+ ^1 @7 Q
- 2 c2 B) }3 E1 [9 k$ ~
- ; Q' q) N$ p% i/ o5 d7 }
5 U8 _# j, v* Z8 [
" \# i( X. M9 e, j
######引入库包############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()
. I3 ~2 C8 ^1 D
3 k, ?9 U2 l; s! `5 _ * ^1 {5 E9 }$ Y; r% v: ^! H# H7 {" b
例:线条的透明度和颜色不同:
8 U! s& b, D) U3 d3 q( ]- c( o# M5 o- . O+ P/ r* W2 K9 W' N [5 j
- 5 m, i1 \; ^# V4 G, J( u6 h
$ a1 w* Q D3 @# w; y4 f- / G/ g! d/ S9 |, s: o
2 {6 } t& {2 x3 ^( W1 A& Q: a' j
& B) K3 E- f8 a2 ?6 g/ [9 e; X
* Y7 [+ C8 a! V, V4 x- : o3 `- k" k9 Y0 e) @, {
- 1 h* D- ~; \6 d9 f# o4 N0 y
1 J" y) M' {) P5 P) W- - c* u" ]3 W) I. r- s
- 1 M2 X7 R8 p9 N' [6 K5 g
1 G* P( U# k1 _" j" X% W
2 k8 z. A, {, g; l4 B( ^ C- & L3 p& `: n; j* l9 E/ h
: ]% ?3 L$ d% m2 C1 \
' U$ K- R# F" e! w2 R- r6 y- # ? g. r g" |' t5 @# Y' Q) B* I6 M1 ~
5 g2 z8 v0 e* l
/ T c$ C' Z. C) k6 C+ Z9 U8 u6 V) M# a+ N& e# B& 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 = 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() |