[Python] 【气候软件】Python7:气象数据可视化的绘图基本流程

[复制链接]

气象数据可视化主要依靠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("···")

    * I0 B% W4 A% l, H2 l

只要按照以上六步,基本绘图没有问题!!!

6 h! u6 `. Y3 q9 i0 S( z6 g' v
* ?  c9 f+ g6 h! J7 o7 j1 y: B" M6 I

绘制简单气象数据图

  • / c  T1 z) }  R7 ]2 Y
  •   V7 J- u) }$ u7 t6 D
  • ! X2 E4 U: l7 Y  `- X: s

  • 2 }$ @# {5 X- {3 R# t
  • - r. D) V1 _6 O9 t$ Q

  • 8 Y' u" z+ a( T7 `* }& ^) A
  • 8 w0 m+ x4 A% C. |5 U
  • ( K5 h" j$ u; f  F- @$ J

  • / I$ A" u: N' j5 E$ _3 S! o

  • 7 T$ e  L0 s- K( O8 O  |* O
  • ( o% p% `. d, [& C

  • 9 P+ }$ z" a0 J2 U+ m
  • ; D, Q+ v0 j6 h. }( h* ?( Q
  • ( X% x, j8 }) h. h+ |

    / `8 j; p9 X: S7 n

######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("画布")/ N5 U6 X: [9 z2 v

3222ca850649b6f730a155691403ec39.png

备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi.

figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。

dpi为图像解析度,过低的话会使图像模糊不清。


/ x7 e# \, {7 Y. e8 p3 V                               
登录/注册后可看大图

基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。

a9db2c0d586d2c65693594bef673005e.png

这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。

  • 9 b. r- C+ E5 p2 J" _, m

  • " _" |$ G6 g# u4 b

  • ( P7 ^5 N! P+ B0 O- f8 M1 B0 r$ Q

  • 8 ?0 d: A0 o/ }9 l
  • " Q2 ~/ g7 u& F9 f7 H5 S4 r1 d

  • % o! ~9 V4 v- g0 b0 Z# |
  • " v9 A8 b. Q, B% [; B
  • + g1 W4 N  S( C7 ?# r: T7 b- g
  • 5 Z" d# @# y" f* A. c" j4 y* y: a
  • ! W0 v% }# |% u2 q; Z6 n
  • 3 v8 V8 V- }: ?" O# g. K7 Z: |9 W

  • 0 a2 ~, t! t) J" Y6 t

  • 7 s5 w8 C( C" v1 d6 ?+ y# ^
  •   ]* p1 v. U5 G& G% d; w# Q6 X

  • ) I) b, f+ h4 r: l. J: ]+ U% u

  • ' }  N' i* [0 |3 p6 a1 z& O
  • 8 D  g0 R0 I7 m2 E7 Z& T; F3 Y

  • 7 ^* Y" G3 R4 T( K7 U: i

  • 9 ~$ K# P4 y& L( t* t

  • ! d7 W( ^. X5 d3 x0 J4 j; t$ `
  • + ?. M" u/ q& G+ T3 Y

  • # q6 S% f6 \0 v

  • * a6 C5 M9 }( E$ P# h% A2 j2 @' q2 _1 h

######引入库包############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()4 d# H8 x( N: s2 ^9 t


* t; T8 p; P8 u- R" f


# J8 M- T# h6 D2 S$ |$ y2 }$ A; R                               
登录/注册后可看大图

# V" i* j1 E- _2 p

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • 0 J% P+ E9 J* h' W: ]

  • 2 h7 p8 l* Q6 Q3 ]) `
  • , i( e) P( X3 Q& J$ c
  • ( Y1 |0 H) B! e( h
  • 8 r3 `! |* Q% G

  • % H' [1 M$ A6 z/ o0 g) E6 B0 X
  • & t" g7 L7 _  r. v0 B

  • 8 ^# d* v" e: X6 v- N5 |" q

  • & G( Y, ~2 P( j
  • $ C: A# ]4 C% e

  • ; I  w, M! E$ R
  • " P8 k6 f4 l4 L9 S

  • ' q; h7 u8 ~0 ~# L/ ~* S1 N' J$ C
  • 0 ~0 w; e/ ^5 \# a, Z& y& ~
  • " X$ e. c& [4 U( Z' v" b

  • $ W; K, _7 Z% I1 ?

  • 1 l! J& o  A/ d- Y1 ~

  • . u  w* P. g( ]3 x7 i

  • % V* l! m2 c5 [3 t  T/ v
  •   l/ S; f# X6 O0 f

  • : n* S; O7 N5 E

  • ! F  T8 g7 M, c# o+ i. H8 i: u- Y5 o. k/ f1 J: d& o& b  B' y4 o

######引入库包############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()
2 e/ V) C, C4 g; l$ Y1 a

' v5 t  n  C, `/ M


% Y. G% K; n5 [2 J1 T                               
登录/注册后可看大图


& h8 J% q1 v7 ^8 S6 q1 o5 z0 x

例:线条的透明度和颜色不同:

9d9110a408fbe81329b7cfec01cfda76.png

  • , }" M) ?6 i% R; k! [1 z
  •   K  u! S' J! Q

  • 6 h: n8 W+ \1 {8 F2 |* E

  • 6 C/ V, n5 e6 a* r# D1 G

  • 3 u: U! M2 o1 J" ~1 {

  • ' o) X" Y8 F2 I5 o" R. v

  • 3 R. I" F5 y3 [1 ?7 I

  • ' u# |* e' W# A8 E! y1 N

  • ; O4 X4 f/ d" |( s

  • " M# q/ b* Q/ R# b& N1 V; {
  • 1 e9 F# @: T2 W& C
  • : W7 ]! n3 `' Z6 |" D5 w  }
  • $ _- U+ f" c9 o

  • * p& F" j9 b/ n6 d! s

  • ! I0 a8 ]; {( P. |! Z' R
  • / s& i8 H+ g% [, L% l1 n9 P

  • ; ]6 }) I  _& i. s; e

  • 4 ~/ Y' M' F/ |3 n) M( m6 a3 V+ b

  • ) R6 `# A' _0 i) L  H9 R: t

  • 1 D: _4 u' |1 i+ h- |
  • $ W# {2 Z$ z! B6 m, c
    + e( q' @/ B) A* E9 j

######引入库包############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()

回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
有风
活跃在2022-10-29
快速回复 返回顶部 返回列表