|
气象数据可视化主要依靠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("···")
3 s* A k% \1 {5 l2 t$ ] z
只要按照以上六步,基本绘图没有问题!!!
- }- M. O2 N" n2 l9 R6 L+ {) U' o# N2 d: o
绘制简单气象数据图 - 0 A' `5 j. q- \6 X
. N$ _8 Z# G! F' t% P
" O& H$ L& {! P& O# {( E a
+ L7 B- U5 R3 `& ?' n1 J- 9 p& j/ b! Z* z* k B
- 5 k) K6 G0 R, D+ }3 w/ @
' L* U% i* Z7 ^( `
5 R- C. `$ _' q- ' w- E! F7 P2 x. p# w f, t
- . y2 K. `% b* _3 f, I
& _! ^4 {2 a5 f: m- $ ]8 |0 `, G: i$ d0 M8 T. E
- 3 J* k$ m+ N% }+ ?3 a
" y' w. k+ F- T5 m* \( P, h3 A
y f5 t: T* w
######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("画布")
+ v) P W' B2 [& P2 q
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
. m$ H+ K1 J7 A7 j- & M3 N4 a( I, R; t R+ e
P& i, k- D& G' V/ U7 X$ a7 ?- 7 B6 h( s- X) E7 c
- 0 Z& H8 L/ ]4 T$ ^, G; s( F- |! {
- 6 e6 M* y+ f7 L; \1 b
1 |( S/ M5 L5 [0 r* A
" V2 d( P/ \" ?7 k/ U% y- 5 r, ?( g! G% }! C& {% T Y5 o
- " w' |' }( Y v2 X% e
) W3 }% F9 [0 T/ j- + a2 m) U& b" r9 f' b
; j2 |: N; _2 m. k" s
' S4 A- j) Z; K+ J- 5 w9 W2 p8 I- b
, a" u( Z. y5 ]6 [, W6 q6 b- % t1 s8 F2 B6 u; o
- 3 ~) a% m+ X$ R6 B. O
- ) B! b0 Q( {8 j8 _
- + x& q+ y$ r# @7 G. V0 H" G
/ B% K" {0 r2 g8 Z8 W- 1 s0 G7 F& [. b9 ^' f
6 O) F n# M3 z" P; ^8 k X0 S" ^$ R) N; `. t" X
######引入库包############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()7 G- A' L( K9 l! O& y
- F) n* w/ m, W- p. m5 f; S
6 l6 q" F& j, `# N4 n# `$ m+ S1 X9 r
例:线条样式不同:
- * s! L1 O5 w5 U! c
/ o; |2 ^. [3 m) o& d4 ?7 _4 k
7 D' u* }: Q2 x: i. w# S- % I6 d$ b6 u* q
- . r+ d3 r2 p; H9 L* L- l
- 5 b7 w+ _9 F. `1 G
- / |( J% J y8 v) ^# X* e
- + v, e6 C, [4 B
- ; v, H6 g0 S2 ]6 X4 ]
- 2 W+ g/ M: Q1 k9 Q7 ~" O5 y
- 5 h6 f1 O1 \; Y
+ ?" Z/ L9 z; t$ Y- # Z# y" t$ q2 S. d5 X \* W6 A
1 V( h" w5 {: J+ o
) i( Z$ L" C* J4 W- 2 }; d7 v4 K/ X' o! n t
- 7 y: \! O. {& D0 C' N# u
) a) E" P [* ?5 H0 d0 ~- 3 N* o1 a: ]0 {7 L8 n5 U* s
- ' R8 a6 p- N2 X8 q, k
- * J: N' G' ?9 [! b% I @" ~4 x# h# X
: f7 L" V+ h; ^4 G9 P
6 T3 R/ T+ ]! r) A( X4 @" n4 V
######引入库包############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()- h4 a% R: J0 x; @: [+ C) `
" J1 n# {7 W- m# |
2 @0 J3 f/ _7 h$ r; A1 D" o; B. e' m例:线条的透明度和颜色不同:
/ e: Y( y6 x: Q+ E3 d. ]
* h# W" S( ~2 W# B$ i- 3 X7 ?7 l/ o( }: d( @) e
- 0 @# g8 d& ^+ q1 `. \
4 b/ V4 Z; i% s& y7 X+ `
& c9 X8 ^* H: }7 v% `" M5 e4 W- 7 ?5 I$ q( |7 f3 K
2 v- V! c t( B( D9 x
0 d% M$ \0 N* w' U2 p- J. X3 g
. b2 w) r6 y* @. n" _$ {* W4 R- 4 n$ r( G) i, c0 B3 T" |$ M
- |% L$ z6 L1 Z7 a5 X
- ' o$ W( [( D3 j* S; f
) \+ h( R9 |5 V3 e2 r
4 J3 G- q! v5 D d- N+ z4 U
1 ~5 | |% [$ k, n- @, L" \
1 @) l6 [, x: g6 l# w- " X9 j$ S, N4 C2 ?9 @6 W1 Y
$ z1 q. F: W. L& w6 H" @- ) Z. `. @$ u0 a$ I
- 2 O! j- `9 U; e* _4 h& i8 h
$ K2 O0 V7 C/ u w
######引入库包############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() |