|
气象数据可视化主要依靠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("···")
: e1 F7 H- B0 Q' q0 f- c
只要按照以上六步,基本绘图没有问题!!!
1 N/ R& t; Z6 G( p' U
. ?& ~" c3 X7 Z9 I% C绘制简单气象数据图 - # t: I; _$ X' q6 v
- ) a; F1 n0 j2 C8 ^
- 9 @& L# G' u9 g7 ? t
- " n, }. }6 ?% d/ p+ X0 A
- " _* \( S- q3 B$ A+ L& V
- ! d% G2 L) q2 T {
8 o+ @" D5 o3 c# h" j. ^- 8 H' @. K/ M( B! e/ P+ X
+ v% f" Q" H1 B! l- & a/ h4 }( D4 v) j/ r: B6 t
$ V, T, s6 N( Z/ n7 O9 B8 A
& _. T+ K, r) t4 t- - m' X$ A' p6 R6 K# R9 d
6 ?7 J- Y3 P5 H/ }) `
3 I H1 Y) U5 ]2 k1 R
######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("画布")& F. H/ T6 ?+ B: {0 g! Y3 q
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - : k8 l7 n/ _ d' k$ Q6 W6 g. N+ d
4 y" w. w* ]4 {& O( c" N- % @! q9 U. E* M% ?
$ B. z$ N' s6 G+ K9 B
1 g4 D& a& u0 w. z" M! E
2 c# ^ x: K: V k; s M
3 d* m0 ~) W# h* Z \2 x9 R- 6 T+ [0 f7 ^: y* c* y* r' Q6 ]
- _% n2 ^* g$ t
- b: w! n5 C6 N+ j: F- 1 p8 b$ D% e+ y% \
% L; X# } J, }% I3 g- ( ~/ j4 W; ~4 |/ m* x4 m
- & _. |9 W% u: P+ [' Q8 N
- 5 D- \6 `4 k( k" a! Z0 I
- ! S0 W" x' X+ |8 N2 O
4 r* ]# L3 w d/ {4 A F
, _9 ]5 S% B" o+ g n D" A8 g5 f
4 {7 l8 m1 h6 }0 J/ ]: [1 {5 G- 2 ~/ a2 n$ ^- j# Q, _) \
- & z) n! l$ _8 u7 `
- ; s% R6 L: D3 Q. Q; i; _' @8 ]0 l
- # D. }* r2 W! Q! ^& ~
; I) [/ A1 Q1 H# @: j
######引入库包############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()
5 B, Y% Z$ u; |4 {/ e
2 g- K4 U% P! i# d& H9 A $ t4 X( w s; e- v! G* O2 i( B
例:线条样式不同:
- : @" ]! J# K8 w. J; D W& ^
3 T, c5 C- E, P& {' D' l2 Q& u7 ]
' @* Y: o1 R* x1 f; P5 x! @- 9 X* Q/ t d' x+ L; e) I# }
% p6 I$ p1 K; c7 o7 e3 Y3 L
# ~* {$ H- I! u0 `- 4 j" U1 G$ Q( Q; [- C9 r7 b4 Q; v
- " d- z# R9 U, _" [8 U) v* S# ]1 U
5 O4 i# G) a* c- / I5 u9 ^& e+ n- B
: l2 }3 M% \5 S# {
! ]# M1 a* B, I. [/ e4 @- ' S0 @2 @6 o# z+ E; p
- 1 @( \1 p/ Z$ u! i4 l& E9 j
3 g2 B& j3 M* S% v4 m+ u1 K5 m8 {- 9 y" H, z# i/ ]
( P" p5 X! Y2 G; g8 o* r- - U% N# D% ?* z9 _
4 ~6 [+ i. ]+ e5 y* }& S
. |5 J3 v; |8 {6 @
" w" d/ B8 m( a) L, U" @/ r
, F8 U+ y" Y5 M% t( B5 i0 {
) n+ K5 \) `! G" G3 C3 Y 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()4 q3 M0 _, w6 \1 |8 b$ D b4 v9 M
9 t' g& k& A @9 u# A/ c 6 O, O* s1 R; [$ S) M
例:线条的透明度和颜色不同:
- / G9 Y2 ?( S* e5 k0 @ l
% t' u+ V5 ]! E7 y/ m2 S- 3 {2 M- _& k7 y1 A Y# D9 g" Z8 y. d
- % ^( N0 S1 Q- B) X4 Z3 M; K- {& T
; E2 \# \( o: h4 x3 F7 c
! r4 g5 @+ B7 A
- V# @/ [0 j4 m- {- 8 Y: `; G3 s0 p" t/ b" i# t& j
- ' V: ^/ v+ M2 L- k& ?) v" _
9 v* f- n1 `: e7 ]; s1 V) t' ]
& k# l. ]9 @9 o- V% }% Y
2 H. K- }, g' v7 b- 9 g& Z! O6 n% f5 `9 K7 y
" m1 k3 ]4 E* j: |4 N1 g# l- 9 C8 |" y4 ]# K1 v' P! A
' h: _5 b" \( H) d- , Y1 v, A) E) L2 A
" c6 X$ F0 q% C7 n0 x, ^5 T1 B
# m" c! K$ M7 N( |) E9 ]- * w4 m" H. M3 f2 b
! d7 F6 y' {8 z) l0 u x$ F+ V$ Q9 K' k+ r
######引入库包############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() |