气象数据可视化主要依靠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("···") 5 S+ g/ E& j. r' T% ?
只要按照以上六步,基本绘图没有问题!!! + r( @) A, N Q& b2 g9 ^& J! G
) l7 G6 ^* s' N; X绘制简单气象数据图 - : L: _4 W; R: @
' S; \1 m4 @- ]0 j- g) L5 T6 o. b
4 `( a ?2 k, o4 U# L L8 f3 ?- ) I, Y: O" q# z% f
% p! z, H& ]# ^' d& H6 [* t* b- 2 N4 p! J" R% w3 K2 r/ |: F
7 p# O2 m+ r# G& ^, T$ a5 D8 H
. h6 Y- M* M8 L1 a) Z1 n
! ~0 [, _$ |: i" l$ s* A- ' D$ }: X0 _9 v3 O. J/ R/ B
- $ a4 o8 E% N7 |
- # {3 B! y6 w8 h, U e$ H
- . S' N, s5 v4 L% J7 i2 q
- 4 m, y* v# ^& ?( h- q
7 \" o) I6 C7 r6 U/ e0 E* n: a
######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 Z( A2 C: M" w# t2 i* [! r
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - * q# M6 _# m: O8 f2 c: ~
, P8 @" s8 b3 Z3 o" e# H
5 `& s0 h: M) {: C9 G
' e! t( d5 G' @) T- 1 f+ v3 B) n% @$ {
, [5 W$ p) s, K. ^7 S; O' Q
# m: }% D4 w: K V$ h7 b4 Q
, u P7 W( A. K8 C' r! W1 ^# {- 3 f: ?8 G. Z! q' y/ Y" U( f0 \3 A( {# {
- ' W$ h& M$ u0 j9 y9 H
- 8 N4 Y# g9 q7 w+ D
0 j! G0 D i0 p8 N/ P$ w- ' K" B0 D3 Z0 h# t* e) D
- / }8 M& F ]% m x: R
- & K# }- m# l% I9 {
- 9 i, S* h2 c) a& E8 `% Q' |. G
) ^- `# {9 x T9 ~, O- \+ h( I7 i7 `
$ Y% S6 `1 |; l: N- : T, C3 G: I8 a# Y# f
& Y8 t* M2 ]. z, P9 X- & p7 M2 ? b1 X$ _, k
" b1 F* b: T& d( w2 ?( O" d
8 N9 n3 W- {, A. G+ a5 b; j5 o6 N" z- h' V6 }, g1 p
######引入库包############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()0 R" J6 p- q0 K, W
3 T( U* R2 _6 b! T 5 m) |3 D$ r" S( n
例:线条样式不同:
- . B( l% j. q) n9 S7 t1 X; j/ ^
" q+ V5 h, a2 D8 X. d5 w+ k- D- ' b2 D" k4 Y% s# l/ `1 }5 z
- H6 [5 C9 Q/ _: z" g$ p: l2 f
( z6 I3 E! N# Z& P# Q
: N# v: H) }+ c6 H# v4 J- ( c. Q/ N. `" ^: {
' N% t$ d, C6 O$ R' n; C- ( m5 J# n- j2 ?/ d s, R m" C
[% ]. |$ ~. Z$ S2 N. `
& ~' u3 l7 V! b& _& `4 S
8 K# w# m# C O+ Z* m- l- ; \1 k; e" R- Q4 d2 N- k6 }! R
& l* P9 O6 [7 M/ c
2 p6 m9 E `; s6 |8 ]' A
x% Y S2 n7 c) U6 ~# E
- b# O) j1 Z' b( B6 e
6 J- w3 H5 L( |& a& T3 k- T
2 {6 t3 z' g1 o$ ]: I- }& y; y# ]2 r& X- 4 b! d- e3 |0 S. r
5 m7 } [8 i V+ m8 ~6 \4 ~- 0 r, I* ^: x: N# Q' U+ M
/ Y6 T& w& P5 P7 z1 x6 X
######引入库包############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()
# m- C/ R, ]' n/ G6 I : ~9 \5 N) z! S! l, {
3 ]" E- [( ]# G例:线条的透明度和颜色不同:
, d: O7 `2 d0 f9 u! ^5 |; v- 8 ~* Z7 A6 M+ _) ], Z. l
- 8 P8 E! z/ m" i8 C) k0 \
0 `3 R1 G# @, N' f) J: Y
- K$ U1 z! Y8 B, b6 A
) `" |. j1 m" T/ [
& e6 B! A& K. H+ U( ^* Z- _( K- 3 Q L! i5 s4 \' v7 K
- 9 _1 q7 M$ C! r5 s% b
* L) F7 t* S4 F$ \ |
' f% h; c6 n0 P7 `! }' m- " ^( o- j/ [9 I
# R3 t8 I2 d. h2 j; R! j
* T' K9 \ [# |2 x- 4 ~9 T$ x8 M6 h) Z! ]: T
5 o# i" b2 e- l- [
+ d4 H2 q& ~3 D. s5 u
% ~# f9 r" m( C8 ]2 z- & P# {+ c) [: @, |
- ( A4 o$ L) U6 J7 U$ R/ O
- 1 v: v# l$ q Q; g' Y" A
% Y. r+ |% I0 j- O1 b
######引入库包############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() |