|
气象数据可视化主要依靠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("···") : F$ e! V/ M' U0 [ ^6 A" d
只要按照以上六步,基本绘图没有问题!!!
' R" g3 a. k8 `; u& O1 } d' ^+ {0 r' E1 m8 o
绘制简单气象数据图
0 N( C) A q; M8 f4 F2 s, N- 6 m8 F9 C' f! O# x
4 Q. O- Z1 Z: p, U
! L" m5 V2 u4 C/ v. e- : N) `7 B# s" @6 u' a0 A( e
- 1 e' i8 |( j' F* \$ K: f
- 8 P; _/ x9 f# @# o2 B
- 5 i7 f" n% y! I: r3 w
% W. e3 x n0 T
% g& o* K1 q6 P) Y+ i- ' c* a2 L7 o$ p Y
0 A' s4 T) L1 q( I9 S N K* X
& N: W3 R( Q' X1 ]' b" [* u
/ b" ?& P5 ]7 q8 b3 F) h/ F2 [8 l, F0 ]0 t- ?- _5 b
######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("画布")
% W; D" y1 k& S2 O5 K; z* E4 D$ [
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
7 R! H7 h5 c- n; y& L, ^- - L8 _1 ], j4 w8 l1 Q* d0 [, Y0 R& ^
" p2 d2 @; Q/ A% P- 8 o7 p8 D$ ~( ]4 z+ q% S
" j! p( p$ V( j2 D
% M+ P' _6 ?, K& T" k% `0 _
# ` l0 c( R# ?* S5 U0 G- [0 n3 ^3 z9 r
! o% s( W" u3 t( H- ^
5 t/ S/ [1 H9 z; [' n1 O" K
f5 n, B- ^* G3 q ~$ m+ C6 M% u6 x- L3 U, E) Y$ c" [" T
- ( g& b4 x9 w2 o9 K& b) T2 x
- ! x4 x5 y. l6 q) h$ W
8 c8 \% ?1 ]+ c. p9 I
s6 D/ `% t1 w7 ~. v
$ w! J6 _! F; z% C
; ~7 U: \% A! ]1 ^- 0 v0 X/ [6 h! G1 p7 m
, Z1 l" D1 l/ e, F2 p0 Q9 X% n/ A- , s; F2 P# | P+ ?
- G: y1 m3 i" ~6 s- l. e
i8 p/ g% m V" g/ @- F. c. Y, V$ k9 W, R* T0 M: Y( I
######引入库包############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()
( u( j; U- A) l/ | j, B0 b" a ; @6 m9 j/ }% `5 j5 T9 H% x
- R; D" b/ N; b3 }1 G例:线条样式不同:
* O# {. A$ q) J1 ~" |2 I( ~6 ^/ z
8 r$ H8 w/ [( v C( |; m' b- 2 w3 i7 Q* f% A! \" |3 V& j9 h
; m* x4 }. m; y6 L; a! L4 R% y- 5 N! ~1 O. h$ o7 U; \# d
" Q. L! j; v: h) H+ R0 X5 @- ' `. C" p; M" j/ F
- . m1 i" f9 J6 n: K( U" q
+ D2 y. K( d/ r& _+ Q: |; L$ g6 g
! w' f3 I |9 i4 M3 O& B- 0 h$ }4 z( \* T$ c4 A6 D0 N% L
9 }; N0 Q/ G9 G# v- , r) ^% ?! `' R. X9 Y7 V
, Z( J- T3 C3 z* Y0 C. W7 t- 2 N# R( v1 u) B% ^) S$ D
- - c2 \: @) r7 n: _# _& \$ C) H
- ' c$ s) Q$ G, e) ?% {. {( _& e
) Q$ y- J7 D7 q. } Q5 ]. Y& x
, d9 v1 U; r& Z$ U- 9 M' b* ]5 O2 `# ^& c. |# M8 N9 t
- * p: L4 R3 C7 k0 p3 ?& x9 t
- 5 y( v( w0 Y) c+ ?9 G. f0 P
. _- n9 }* X- M: W# k' u
######引入库包############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()
1 V8 I9 J5 o* h 2 p$ O% V3 c; G( o- l
# q+ ]( z$ W& b) H/ f4 p6 G. u2 G例:线条的透明度和颜色不同:
3 I. A9 q3 m E4 F
8 W' C7 Z: |# n
$ Q. |* b/ h( @5 }$ h- 5 i3 F5 l5 k' y
0 t) y# K, l& T# d7 {7 K4 ~3 ^- ) p! u) G7 w6 u
" ^* @: }/ x" J4 B8 C' c r
' U: P. s( r+ x- M- k4 i- 8 d6 N4 j7 I( D1 y
- : G/ y; E7 _( h& f
- S9 L/ F1 Z# Z! Y& e: x/ ^
, V, U7 o; Y+ @5 `5 M/ i+ _& `+ B
. k- T5 [; q ]! v- , n( g, \3 C/ t
- + d$ y" G. ^/ m
- " q& t' P0 H" f1 ~9 Q7 D4 c. N
- - ^2 {$ D& Y: _
- + f2 S; Q% v: h
- H' Q' {1 D, k' p
* }% m7 V; c7 t$ o+ x' ^( @- 1 v. p' z6 z \
X! e. q7 x9 w5 Z
######引入库包############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() |