|
气象数据可视化主要依靠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("···")
; w. v2 V2 S; o8 ?7 p
只要按照以上六步,基本绘图没有问题!!! ; G# ?9 `0 ]+ O/ E; A$ @
8 H: S: z; e. m5 [# v绘制简单气象数据图
+ V5 k( q6 s9 T3 h6 [, ^5 N- , m, X$ O% J/ B9 [
- 5 Z! D! l- L* p! ^' l
- / o" D% n8 ^) G$ m7 O
8 K7 q. N- o7 q; F4 }8 ^; B- 5 P/ v# l6 g! T3 q4 `8 T
- 1 j8 e* v% ?+ p
- 2 C3 R# H2 }$ q1 u( B i! y+ _
- $ G* B/ _( p. L
2 S7 X' w8 d, N3 s* D
; X8 \8 H9 O' d& s
# Q! F5 y6 h9 p7 C {0 D
; Z% b1 Y3 t8 h; Q8 W
# n% c$ Y' ~$ H8 `" r7 f/ z+ @9 ^ v$ A" h, R5 x# D1 q3 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("画布")
. }8 `' i2 z; d% p) `1 N h
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - : o% J' A( o. u
' G- [% a7 ^2 e6 i! n- ! T$ T1 Q. [( d8 k
- ) |& k6 m9 H5 y% I% f' K1 }& w
- 8 A0 k' o/ D" l+ o, k. y S
- ! b2 ^: {( O" J* [
4 M' f0 v2 A4 ]6 k6 c- - d" G7 f d7 c5 ?7 {0 |; Y
' i" l8 Z% b J) V' [9 H* W- " {- Q) K' ]8 ?& U/ P, S/ E
- / o/ s( D' [7 K7 L6 S+ i% w9 q( I
- - y- b8 C! o2 N3 S% ?+ [. P* ]
# Y W) f& z! G3 C) d: N0 i7 H- 8 f" ^ O% E' ~2 u( k& n
8 t0 b9 A( @3 K2 _1 X8 Z
2 e& R& ^8 O: A5 ^, ~- e- a3 A
n' x1 I; z0 f* r( G+ B8 ?
( u8 E6 \2 n: C
- I c4 ~3 a+ j g* S- ! a# Q: v9 D8 g" a6 M
- 7 E! c* w3 A& b' c
- ' E0 }+ K8 X5 Q1 W
; j3 K* O) h3 z3 o( l* Q# p6 y6 E: A4 S. P2 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, 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(), X$ ^/ A6 W' @) \% b w& B
@" n# Z- ? S6 N% ? / K, J" T# I8 D0 e, \- ~$ q
例:线条样式不同:
- 7 Z$ {2 q, O2 G& N4 {
- ; t9 Y2 N" X6 ~6 F" W1 z$ ^6 f5 g
- $ F: M7 G# U0 I
- / O; i( a/ m6 p9 o( o8 G
: _7 M1 x( n$ z5 D' W- ) Q: N/ f. e: w8 t. ~9 {$ W1 I) a
- , C6 W8 z% W9 C! @
- ' p0 ~6 o* ` }: _, F
. z3 ^/ _9 b# K7 a7 \6 G
6 D! ] S, ?/ x$ Y& U2 O, i- 2 p+ ]; J+ `7 C& S1 ?2 M
5 R" X2 e0 s4 l6 o
+ y0 s4 J0 W+ a7 D- 7 L8 @. b a, ?" V
: H3 y& P& N( w4 K; d. D2 x1 m3 ~
7 v5 J# C9 S, [
A( f* [5 }5 _( v+ ?( C- - K& T r$ O, i& p
# i: U. f" K8 H5 |! u
0 a! M, |6 i* v$ ]2 ?- 3 w# W& w" r9 C( i2 y: k# X
7 Q" X3 n; D# g2 m! F
- c; p5 P, S- {* A) V7 s
######引入库包############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()2 X& T' h% D [; K }3 E
/ x: |0 g; |' ^5 u: R& Z# j
1 L" q! ~# C% G* w5 S3 j& G例:线条的透明度和颜色不同:
- 6 r2 F$ U4 ?4 i; }% z
. P; j- Z: n. C) W$ n ]4 q# p- / O! d6 Q/ ^- B5 u2 ~$ ?
- . g, ~( z6 x$ F
# A! s8 L& U, U9 M3 S1 e
# y5 Y* k# q, U R7 V9 D u- ! X0 r6 }. W" t! P2 @2 Q& I
* C: c8 B# ^3 m7 ^$ V4 O* Q- ; `. P. _$ {, O4 {9 ~
- ) Z* \, z' a# a2 E$ X/ h* i
7 h" Z, N9 H( K( D/ `/ _- 2 _, S0 i; r& _3 {9 z
1 U: P: j6 Q3 u5 k- ! L5 L9 ]0 ^6 F- m. j/ `- [
- ) r2 T8 O/ F( a/ W5 }! W
. ^& b3 u8 n' F* X. T, G- 8 R; s8 b. `( ~) Y% M$ @* t& d
' z8 p5 L$ V5 A9 i* H# g- , L4 p, k5 r' V* m% T: V
- / M* d) v# ~ Y7 D) F0 E2 C
- 4 Z! p! Y8 ?$ @# @1 `
! G R) R9 h; J% I* 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() |