|
气象数据可视化主要依靠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("···") j% M. D6 E3 Z
只要按照以上六步,基本绘图没有问题!!!
0 f# ` f0 _2 p h
9 ?* B4 U4 m4 i: f g2 n绘制简单气象数据图 - 8 x& l5 v( O" } v
- 8 ~, {% H; _ x2 J% ~* L4 u
- ( j, X* E- P" W' ?1 C; D
) I3 c, a4 ?# W. {' K) D0 v6 X
$ |- F* Y- ]" G7 j, K9 r& U ]- ) Y0 e3 Q: T I* R
* C3 l5 M! T! R4 i+ ^5 d) K( V
2 W1 O* {0 b' h% _; U/ M- 4 r+ ~" ]0 n0 Z$ b
- 5 P. F1 X: h/ j7 y2 L
, `. {4 \* |- Y( b% A, u- L* Q
; m7 d# b1 w) ?$ r" {- [9 D5 @; F9 Q
- & J7 s! d4 H: \- b
0 P9 D8 K& v: @) O+ n! u
######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' q/ X% A
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - 8 x7 x& F T- r6 m4 g
- ) b. `' x% J) t+ A& f# r7 y
* R% A8 y3 j0 v$ d( E# g- + D' y0 s# N8 U0 g' @7 T
- ) s" n7 B2 P8 [2 g
/ b4 P7 { `8 U+ r+ [% [- g- f& i- ; G+ z, A0 D- }4 ~# `2 M
: L: q9 s1 W& `" r
: @6 c0 L* V w- v: f5 n! U
- s( [5 s; T# \4 c$ L$ T2 v- y1 @. L! }% N# m$ b! |
- 3 j" A( c U$ `0 W* @: ~
! o9 D' m& ^1 H4 V$ o4 C
* U8 |$ z" G" p4 T1 ^# N
% N" ?6 h# M6 l) n; O- 4 \7 F, K' W* n! S4 A( i9 Z7 G
% N! G/ y2 J) }1 E' a# O
* x7 {0 v) l$ I- 7 T: _0 I7 H8 F$ W$ G+ s
- ( i$ G( H8 {+ q4 {
- 4 b* `& G2 ?5 Z
- 8 E8 [3 F! f) ^/ I- P. Z
/ K+ ^" A9 @* k) _
7 m, o. b. K$ s9 @. D# K3 Z- {
######引入库包############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()
4 v3 s8 E$ ^7 k, h. q- n h + o7 \! i: K+ Q8 c" K
) K8 Z+ V; u5 P4 Z m; G- M
例:线条样式不同:
1 q. H; N: d. k, X/ \" C
9 t/ Z7 m3 ~4 f) y$ V- 7 O. T: D9 I6 b5 r
- . v7 [6 Y5 P2 t0 A% C* N
: Y) M$ ]9 j' u/ U+ m% J5 a+ t( K* U- 9 a1 m' N0 o; ^7 L' d
- ( C- q. F# v3 J! E/ a
' L# e7 H+ h: |- |- 5 V7 j4 M# V/ x9 I
6 ]; D- W3 W! }
# C$ D3 |4 f1 C7 {* n. a- $ e8 y: N) k5 Q% J; V% f" s/ p
* l' d/ J0 u: D6 E& t/ v. ]- 2 u; e- f$ }! `* k* z
' b0 ]9 Q8 B5 S% }. c4 R* U) S; O- ; y8 @( N6 T) W3 H' P
- , |9 S8 ~) J9 Y+ [3 `- W
- 5 ^# P7 n C2 |
0 `+ m' J- A! [! n
2 {6 M; K$ e% X" Q1 N8 }; v
8 [) r& ]3 t: y9 e& a5 o- 9 }( G, l; B, ?% I8 M! g
. D' _0 w4 s4 A2 q( w( q3 \
######引入库包############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()
0 o5 e* s. P" P4 e, P0 k5 ~
% i, f; u! h; o7 c E + Z: a: B6 x$ C& ]( ~. _' p$ x/ u
例:线条的透明度和颜色不同:
# @! e; t: q5 M& v' b$ _5 ?7 U- ' V: x; d! Q& L1 S. b! h" l- m/ S
0 E# S) T; W2 I- ( t6 C( n y6 Q1 |/ Q1 ^/ y9 K: }
- / l: h5 c# R$ i& u; g
( r3 ~& v$ l$ k. \, |) U- 4 Z" N- P/ ]: J) p7 k4 q
. B6 w- W% [! [3 f2 p& A9 Q
# k0 i R b3 y- |+ Q! t
+ I) @8 Q3 @! w3 u0 _0 i- 0 H8 o1 U* T. [! I4 ?( _0 u
- % `1 }/ F4 z7 z! `: \# M- b
. Z* e2 N. Q# B- " B: m0 f; j1 q0 v8 j/ |* M/ B7 F. p
- * l' \: A, O1 ]- P# f& d
- $ u! l+ o; a9 R2 _' f& K6 g
* m) z7 [3 X# H, N0 T) F2 K1 b* E2 {
' w5 j' _- O' H! s- 3 A" ~' n7 g; L. l$ [! ~
0 ~7 A) c7 g) v% @
4 ~# b2 y6 `/ Q* x4 G1 ~! ~9 A, k, f# k1 B1 G5 D
######引入库包############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() |