|
气象数据可视化主要依靠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("···") % E4 s4 {% g) u |9 g* \
只要按照以上六步,基本绘图没有问题!!! 8 j' Q" {. E& m- T$ K6 U
# l/ N3 v) J% E绘制简单气象数据图
. W, p* }2 a; V
, p: ~8 F" ]. s" j! m
' o* F! C9 o; s2 j) k" A
* j7 K, w0 d. S1 {- T
+ _* C: e2 R8 R F8 u3 m4 C: V( I- & s! J6 p/ J+ G8 K& ]
: z a6 |/ C/ ^% y- - M: ?) e$ U* ?* E9 B3 G7 \8 |; c1 {
( F% V: O9 y/ V- 1 l% L, n( p6 d. u* G
0 _- d, z( |: Z: ^$ U: N- }- # W! a. F6 m, }- z( L$ s1 x
4 A; L. {) J' b, Q0 D1 `& s& E* O
G, C. Z I9 g% G+ c; p2 h' S3 H. T/ D" v& s* D: 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("画布")) ^& r8 I4 h/ D' \: k% p! D1 A2 k# J3 R
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
) v* }% D/ n3 b$ c* n- . L" J/ Z" ~$ {; O
- 4 w- V2 O5 @; g9 w
- 1 ]1 \2 m5 X- |0 A4 _0 }
- 6 B( I' [( _& ?" s
- ' k% U; @$ a0 J- e+ {
- ) `: M3 d7 y$ W& Q2 E1 S& t C
- : @1 v/ `. J& s( F9 i$ [0 F1 {6 M+ r
- ' l% ]5 m7 _* {; I+ B' A
- 8 i- W. M) Q9 d' O- C6 \1 V
6 f. V- }3 e7 K8 K6 b$ T
9 T Q9 T3 s: Q* Y- / k9 h( y2 h3 G% X
- 2 w; F# o( Y2 e# U: E6 e
- H) @& j8 R, }- + p" D# s$ n/ L' P
( `- n% j; Q g* l$ P: O: A- 2 u6 I" X- Q& w, A3 }
- " S* z w/ j: Y a; T
! L7 q) y8 i5 ?( Z4 _
$ ^. w9 D* |& D# r3 n$ v9 Z
3 |, U4 J& Y5 P6 |' T0 A- : w5 |% y2 Y! J' I/ _6 L3 W
+ S; L4 F- |" r" D: R5 a1 \
######引入库包############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()! I" ~- ]6 u0 L9 ?/ G. {/ J
4 Z' k3 [% w5 A X4 C% d$ N( v
: g# [9 o/ G6 f+ _& K
例:线条样式不同:
* W: [2 S4 n: ~- " j# Q8 [" Y8 r0 v9 |) b) P
% u) b$ M" d, ^5 @& j- $ M5 z- b, G; N# e& s
$ @+ `3 ?- m; _9 ?+ A3 k- ) O8 M! E/ r& B5 Z2 @0 Q, ]
- ( x' u4 ?( c7 `) T# ^
- % k- d# T/ S, A2 j- G: b
- 5 A" H/ F* v! J
- 4 b4 b: C! Z; W- @
" H6 ?- c: m- @4 X1 j+ [3 @
2 ]! B: o/ z# {4 V- o
5 k6 \/ Q, n" V: i2 p: E- ! X# n7 _" L/ |; p
- 3 B. L& I. t' z X
% b9 _, u( i3 ~! r; c( b2 @6 y
S4 A# ^. b4 d4 T% [$ g7 w' q- e
& Z7 `- B# S. L7 C4 m7 v/ ~; ~$ N8 q
7 c5 H: ~8 O1 ^" z {: s* ]2 n- ( G1 h2 u1 B& y
- " B3 T% [% \+ }3 l
- - J6 W6 {+ i7 B2 {7 ]3 i
/ e8 f: t" s8 f3 y# B
######引入库包############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()
( |" i3 \* M8 o( F$ x4 \9 i 0 k" z+ ?7 s2 T( F
6 s G0 y. J* m2 l
例:线条的透明度和颜色不同:
- * j: {( t- a! j
- }! I6 |( M4 d1 ^
# K, T. G3 q* R9 y+ r- / \# M' F$ ]! [5 Q: P- l5 L$ G4 ~! x
- 0 |2 h1 i% \/ G- | J* z
- ; @1 G- j. }3 b; Y+ t9 m4 M
- / S& R# p; Z: ?! p- D
- 2 |( m: z3 s' x; ^8 K$ b) e4 j
+ M! K1 b5 I& K+ W
% ]' L1 d+ R4 h6 z8 r6 H) G- # f+ d, o5 A) R8 |6 z+ f
- 7 w6 P6 ?1 K7 y) | R. D
# O; [9 O8 p" [" v6 r. w
" W+ V5 P0 F7 I9 a, N# x
/ A. R; g2 p0 v1 g9 y- ; _- F7 y! u/ U7 l/ `
7 Y) J) L/ }' U& y5 ^2 U- % E6 ]. c$ t0 E; M6 k# z& v9 l# A* y
- & O' t* |2 k) Q5 o1 h/ [
3 Y; U8 O5 {# }# s# G, ^- 5 I) J4 c; v1 T" \+ o& d- T9 j
9 I, f8 r. ^# D8 \
######引入库包############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() |