|
气象数据可视化主要依靠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("···")
2 U- Z; R4 a1 d2 m4 v0 g1 X- T
只要按照以上六步,基本绘图没有问题!!!
6 |4 ?6 Q- @8 O* R6 F' c/ l: {, g& O$ u3 M5 Z
绘制简单气象数据图 - : f9 j1 b3 _2 Z5 u3 {
- # v" A$ u( {" i/ v7 }8 O
: O8 \! @8 l' R/ W t; D- + ]0 V- {) w& s7 l( Z9 g6 g6 O
- - D# L- {- |/ H6 ~0 n) H' T$ \
T* ^) w0 K. s' ]8 e- ( ~3 D+ Q& P8 B8 y% Y% N* ?5 k; k
3 Q* J" ~- B# t+ I9 s- 3 h; G/ F: ?/ B. ~- P
- . @# D3 v) ]4 \9 M
- 9 |' J2 r& p6 w8 S+ e% L1 c( a2 e
- & _" M$ ~( J9 ?8 V. a5 x: ~8 v
- ' \* j0 Q: c- y8 F+ V: I
' R. S5 \. d* i5 q p
1 y: j& o. A3 x5 k" W& j( X
######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("画布")8 T9 e# [5 \* C- Q! C6 l
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
: h7 B6 M2 M( O A# G
( x1 m, Z) t$ y3 b# D* ~
( {4 o" c, G2 q; C3 k: Q3 ^2 f! x- : O# H& `4 ]' l. t* C$ G
- ! n& c5 P1 n- X9 |) o. I# s
; }; Y X/ ~9 y( y/ x: R
- C# B7 X- o6 S' i- 6 ]. T- }! i% Q, R1 ?8 R( j
- Q' i0 K- }2 l$ O' M f
1 Q9 v/ p- z+ z9 ]1 `: O6 Z
8 L7 Z, X0 G* v5 @- 9 |; J; Q; W, o4 X4 ~9 \4 ]
: e. J1 C) y3 ~& f: g, l8 u
U j# a$ V2 G$ ^# h# ?$ }' G- 8 d! V- L" @5 w
* T1 @5 m) ?( |2 f
# _: L- Y# }; u0 G" o
/ }6 j0 E0 M. h* }
( ]- q# P7 W( ~' k+ e: m- % a* h$ c2 ~1 u% C% H* i
- " }* H0 K+ r# U( \% ~) ~0 c
e: K% S* b* n+ B5 W
' q! s5 J! E1 k- L0 @9 e' q7 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(), ]" E4 H; ~4 d
) o) O6 q0 {* y5 U
6 t& R+ Q" d$ P# o例:线条样式不同:
- ) A" X) u# I; e h6 c, W& {
) T$ ]! n" ]0 P- h) }$ |- 0 B0 c9 p' E: n, z1 q
- 6 g+ z# m" x7 y( `' j S# l6 w
; S% P' n0 U% W& R% p- `, Y& x
; g, k' m" y7 h- 2 Q' U$ L$ I4 ^, H6 u- E
- ) y: Q* y7 o: Z3 K* w6 b
, j) c* k+ x) U9 r; ]; ^- ) J9 O7 z1 s$ j/ [
- * a' y T+ t- r) }: a' G
- , R3 t" T+ e( q1 P) V( ^' r
- ^ H$ d! W" p! e. q
, |0 g( r& H ]- h
: D/ k0 d/ R: E* G. t( Z) K
+ _" L% h; i+ H, i- / Y- ?) J" G7 B8 J3 l# s9 f
- / r4 d' a5 A2 I/ D
- d$ f, ?$ ]5 l0 J
, O. L h+ ^# F2 f: H% Q1 G
+ ^3 {$ h( O% J, @
8 l; |; A, _+ k' ?' l; F* i
( _, l, D. b) T% n+ }+ [( K
######引入库包############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(). |; L5 v) o1 ?! S0 `/ Y
6 b5 y3 l+ n7 s
6 q8 S# ^0 e+ Z d4 _- l例:线条的透明度和颜色不同:
% O* {4 z; N( V- {6 b
I; R6 ?$ v9 Y8 \+ V1 E' X- + D+ a% Z6 Z3 i
+ b e3 C( k0 @" D" \5 h( d- : F$ D! ^) x l) N5 `7 [
: b' ?; A" ~- E7 I3 B5 Z8 w/ g- ; F; n: S: y$ G( \: |, N! n1 [
- 2 s8 V: N* g% V
; q$ h0 r3 P. [* D1 U- U7 L
( D$ C4 b7 p5 S3 C- H6 Z- 5 T# {% {, h8 ^& j3 |* V5 i
% b( K9 e$ J7 x+ J+ F4 ^
, j* l. b( g! c# E- 7 h/ M6 R$ K) _0 I+ G9 j
7 r* g! s {' w* u- - O- `) X" z* o8 e( N# C+ A* P% @
2 Y# v9 b7 f. q' i- ]! q
. z) B0 L! O4 M7 B- . v, _ r3 q1 s) b
- 5 Y* N5 z9 ]2 {
' u. m3 c7 l( L9 A& C8 t% z( F1 \, P9 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() |