|
气象数据可视化主要依靠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("···") + H, M# O7 S8 U4 Z. M% C
只要按照以上六步,基本绘图没有问题!!!
" C) Q+ ~* F' q" `% p/ {% g( ?1 d& Z0 E% d: x6 i$ d
绘制简单气象数据图 - 4 X2 ^1 @/ Z" P$ U8 y! B# ^6 w
- & q: s; }0 \: v
& k' X% i% A, H t- _3 v8 h; B1 R
" B& _0 L% S9 s2 F4 i6 I
; q9 \9 F8 u2 ]! L N6 L
- Z: A7 O- E1 y# A* T. K
. ]- g) d2 o0 ^- 9 x4 o+ M) V; e! ~
- _3 P' p5 T. Q9 q3 ^ p, i( R- " o5 F0 I0 Z0 d: L& ?- [
- / T2 o0 x: T/ x) n! Z8 M
- $ r; |8 r- {/ Z
: u$ n* E- y# t/ A: T6 L
( m( F5 C4 w$ h! y5 w4 |6 }" ~& @ r, a5 J
######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("画布")& r: Y% O7 Z. V& ~3 c
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。 - $ q4 {% w' P( t9 `' w8 w
# W5 \1 s9 [2 ?. t# {) W9 h- 1 u7 C# d% C7 X& @
- J* v% K5 I% ~- @( v- _# e( _ V7 Q
- ( {) O. U: s3 l
- @& k3 X+ D, l
% n! y \% A# R; n" z4 L1 k2 Y
/ J$ E N* ]9 H1 ?- 4 l' n6 _9 S, G
& e+ |: S$ ~* E: {, I4 ^- 4 G1 _* ?8 `/ `
- : l7 ~# w5 P* i( ~( V- ?: g
: q, I0 ^' K: L; v6 K
, v( ~ g! I( B+ ?/ C5 t! ?$ a- ! B7 B3 T: B7 ~; b) m
- 9 u$ D, w; @& P7 ^# h; n$ j3 b
- 9 M! h# o. X. P# L4 t9 D% [ h
' C P) T+ W$ E
+ x( w1 \8 W' A% b: V6 j. z1 a* m
- C: v& E" S& [. k1 t) D0 E2 I
" A% u4 z3 z: f. W) y$ R# ?! I( c- * n! T" ]+ X( k6 g
i" H5 s+ E$ [ X
######引入库包############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()
, G8 p4 b, h! p% w6 W P# { ) b, ?: J: ], [
! z- i3 D9 g, t7 e( m% n例:线条样式不同:
- 5 s9 X" h X' F4 h* p* J' U
/ V3 }8 N0 u& X- & c: U) C& M, S8 ~
1 A8 o: r& e z1 b& o% l, l* T1 d
) y* F0 g! C( {
3 E& b# k- C! p5 w- F$ M- ' n3 l6 E: K9 c' ]( l
- : p$ x A3 t h, p8 H( R
- o6 I3 H( Y6 \2 ~5 X# V* ~
- C; r( D# `* k, U( K
- % U$ H+ t# a) ]( o0 T
- 3 p1 [8 ]* |* J! B+ B9 B
- 0 h! x8 f) y# l3 h3 I' q4 }2 A' O$ D
- ! R2 Y0 h, a; R8 c* L8 H
5 f$ I" x9 K3 J8 v4 P
- K0 Z+ _" O: i. {5 b3 _- : R/ `( Q6 S$ o. K% k7 p
& I P2 @5 X( ?- s/ T/ j2 n/ |- ) n! @: u: S4 ]' O
7 F7 U4 U5 I& Y) S5 C5 B2 O
E% h- G/ A+ j6 `
- z1 Q: r* ^) q; r; k) L
" U3 x. `& v0 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()
5 [+ }$ v2 [3 E) y2 t ! V4 W: h8 r I7 i/ q6 k
8 c: `& j/ |+ g/ ^4 |
例:线条的透明度和颜色不同:
& ~6 S# T# f7 _, G
! o3 B* p) q+ r+ G; r$ j- ! U$ b( J: I4 O G
9 O. s. c* I1 e! v4 g# A- 2 g# \7 x6 \. M
7 I0 {: F* p6 Y1 v; n- 9 I: W* n* ^7 ?( X( P$ a/ z, i
6 |% x% D/ J9 ^/ C' A0 K- ( p- s6 |- d% K, E" l+ }
4 t# ]( g" j% E
8 w- ?( a2 r/ f2 {4 ? V- ( A: r* k" S- O6 S
) e" X1 Q& A$ j4 U$ C6 y3 |" N
' Y! r. k J6 L: _4 Z- 4 h2 i6 Z' A ?6 D' m+ E# Z
, U9 L5 _4 [ ?* B% N- 2 x) _0 A. _( i7 V3 N
- 5 W7 o& p! E5 F8 G6 o) L
- 6 ~9 h" T" `" S" R7 R* M, ^
- , k0 z$ _- G0 s
& f) `, H4 R1 G7 u( D3 a) b8 U/ c
######引入库包############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() |