|
气象数据可视化主要依靠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("···")
: X% d4 I7 K% z; F- v
只要按照以上六步,基本绘图没有问题!!!
/ w# h- k' E1 H b& j+ l$ @' x1 t5 C
绘制简单气象数据图
5 E$ P- ?/ x3 h7 v* X' M
- }9 g D& E0 k, H
4 j; g2 ]; l2 ^. E$ G9 J X- / @+ T1 B, g5 f5 s% v
" ~ X6 v! K9 @- * \9 j' o- U+ r# k
- 2 f3 n, }$ }' t( O @
! L w* Y5 n0 b- `* ]3 r! {- % o9 r) N8 w. E6 K }/ L
, I+ O5 q; ^2 c
3 j0 K& e0 `. N4 u
2 d5 \0 y6 d! `- , v, v/ y, G/ ]2 n: i' E; Y7 \
' `3 s& \( L9 O/ v) a9 k: g6 d1 R: m( V, P* \
######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("画布")3 q9 P2 G! O8 Q& S% x
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
1 K. q# V0 F: Z9 f+ e9 R- - F0 C7 d! w1 q
5 h" S' u! R6 Z4 V
* L' R$ D% K1 x. o$ z" M
& r5 q& w- G3 `) _1 N# `2 b7 e( U- : z' f' M( B6 u- @2 i Q4 @7 q
# ]$ O# `2 @. J5 {0 r/ q) B7 n- , q7 ?6 N+ H& D7 P
- : ~! |( o& K% \
- 7 V& H4 x! p( ]% X6 Z: @
- " C4 f S# y' T8 y
- - l$ J/ i2 [: [* g/ B( ^% @ S6 S- w L
' f3 Y7 F8 k2 C5 b6 f- # j- K9 \$ A) M: Z
8 t. P" m* W! I7 J6 {+ q" b) h+ W- / J$ w1 @% i# Y' J3 U: ?
- # D: y: V6 p. D8 e2 ^% K
- * n5 H) I% ^9 \3 k: }$ ^
% ]' \* {$ s: j5 z
$ F% K+ _5 B$ v# B* w- 2 u. f) I' c" z1 U$ {. M
- ' \) d) X) `6 X
- 4 i- U) C+ p5 N
1 C4 a; v2 }+ h" C& \1 k
######引入库包############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 m# c+ m8 z9 M- H: Z! \
% x* a) g4 t. ^# {
- J, _8 S" M G t+ W1 \+ g: R例:线条样式不同:
3 n# E F2 c% `$ U7 E0 S4 \- ! Z* [6 I- ]! J, P6 n! O, [
$ e: [- `2 L* q0 C0 f: g% }9 z) U
& G, K9 E) a& M# p4 R2 r- 5 L# m3 Y$ y4 f9 Q. @3 {' v8 b
- 1 C2 Z) V' ^# Z- Y9 Q
2 p3 @) D! Y( F9 j' C% J% V$ B- ) p/ y+ r! o, s
5 i j' g: ~' s9 [) G& \- % o' O' y/ a' E; C- } ` y
% ?6 i3 D$ R( g7 r+ U# `- l Z% ^# l2 j+ F' S4 e6 u; b
4 U) }( ]6 T5 `) i8 K
9 k1 d6 G' Y$ i2 i- @1 Q) N- ( i2 y. o& z7 T9 p/ ]% @( g# N
2 w- w/ M' J2 Y: x; z/ J- 8 N& b$ ~8 ~# @$ P/ T7 j o
- & n+ s9 \! ?1 n* v
. G$ ^* p6 W2 @6 d5 Z& x
6 A' }$ r* L! o4 p# C, P- # d# u' \0 q, c5 w# I3 i
- 5 ^& j* G, M! C. M; F% |9 v
# u2 n" d( \0 O1 O* o' 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()
- a# ]- i% \2 s
7 _, P- W! n8 U; j$ X( s! ?: O
2 u& E m; [. h例:线条的透明度和颜色不同:
* y1 z! q) \; c. u3 a+ b- 0 i( P9 H' o* h, P1 R6 J
4 b4 x) ]& Y) O* H& g: Y' N* s" D( r
1 @# V5 @: E! d/ [% C9 ~9 i' F
" X c. i1 J# L ]6 E
( L+ F. c4 @3 ?) l/ d5 X" Z3 h) A
. a6 T5 y5 W; b- B. J6 k2 X- ! \' [+ R3 W0 s5 P
- 9 H6 o5 @# f# X ~, B4 t
- + a2 [, Q; d: k) N c
- 0 ?3 Y( }0 W$ f& g6 I
* _% s" D" K- H4 t* v
4 W) Y" ^& _& z8 Q# e0 ^, h
, P: F: j( }( _- j
" B& E' T+ h9 ]" w$ l9 R' b9 _5 Q- d- / R6 o* z3 Q* ]% K+ w! {( E4 }4 v
5 {) X* P: w1 b" ?6 ]
/ A% l+ e* j l8 I8 F' B( Y p
5 ?. c+ u' @8 b1 O! [
. p+ P/ {8 r" U! V" Z* m1 D8 q- 9 D6 `% D* h; e! H; S3 m3 I4 c. |* r
, E6 o4 Z# l) T8 g* }
######引入库包############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() |