收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

[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("···")

    * S3 ^, B' b0 }

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


4 N2 i( [- `1 V& `; s8 Z) i2 t! b
4 f( I' Q! X; ~) [

绘制简单气象数据图

  • 4 g7 K& z4 S2 C3 i, f& K' f
  • 8 x: L) C; \$ K! Q( L, @5 u/ k

  • # _9 n4 K6 Q8 f
  • 9 L9 D% F! {, |) \& W' X
  • ! C/ [: U6 A* S' J6 N. t0 V
  • 8 d! ~7 f5 k. ?. I

  • ) T3 |8 X, u2 j9 G" a- P
  • 2 N  ]# H8 ^2 S' Q' S0 |9 a

  • 1 a! n; @6 M' n7 U4 g. y

  •   B. l* D2 x3 p9 F4 |

  • + K9 A7 D; i7 c6 ]

  • $ |$ @% [2 B9 n2 z* v' }7 Z" E

  • ! T1 `, V# X# F) n" z" T
  • 1 U  f. S% I& |6 V& T# \

    0 E" @1 O- D& u0 M

######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("画布")# f/ r" j/ X+ z5 h! h. P

3222ca850649b6f730a155691403ec39.png

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

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

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

) L, |2 @+ Y0 _4 U
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • * a/ ]! P. G- o8 K0 l  w
  • : Z2 b7 q2 [4 i- A3 a8 q

  • % F4 p8 R/ \" p1 f) H) l" C8 p
  • , l. t: v, ?) S- H

  • 7 G3 s; m/ h. @4 W+ P
  • * Z. C3 \4 c3 [2 h: `& \. l* E; @9 z

  • 7 ?. E6 L" R$ T  M0 W

  • 4 \/ \: K+ t+ k0 {& d3 C5 b

  • - s' p7 X4 B  ?8 O+ v' X& ]

  •   K: j# c( I& c- S3 s2 W. A* a/ S

  • 6 u" t. u5 u4 u' N

  • 0 n; }5 ?; l' |9 i

  • ; s. n: B, i- _8 `
  • 5 j& Z7 ]9 z3 C

  • 3 j+ h6 K1 a$ U: A6 W( y
  • ! Y1 v6 _6 N& B( U1 C

  • 8 x3 Z/ a( d2 R' O, s! Q9 T

  • * v" g2 v% N8 H/ S  h/ H1 Q

  • , O( w5 r% j% \& S4 N5 f& h

  • 6 w- u( d! D6 f" j) c0 s
  • % g& w  ?/ R# Z3 r: F2 X! b; j

  • 2 @7 J2 \2 m! D( t" {5 u* v

  • / E$ Y  _. i& N2 {8 V
    9 f/ Q( o6 w" ?, j. ]4 ^

######引入库包############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()
. P/ o$ R; D1 R" x( W6 s9 \

! g- ~+ }+ n: h7 G/ Y/ ~+ y1 t

% r4 g3 V2 j! \
                               
登录/注册后可看大图

# J; ~& [* Z0 b" v" N# g

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • ( @6 Y+ e7 D6 s" }! F' T

  • 0 h; G8 L) e& T# O# H2 C) w) G
  • 6 l) }4 ~) y4 E& X+ ?) b
  • / I5 Q5 Y3 A9 C* q, C. q

  • 8 N. Z! k$ i4 Y

  • - N8 r" }1 {6 w3 D) K
  • ( V& S% Q( D; L. Z2 r
  • 0 M3 W% @9 y8 w8 q; ]. {+ {% A, |

  • 1 A2 J+ y# h6 z( V' v+ }* ~% K
  • ( i. f1 {# p& F
  • # V' K5 o0 u4 i7 o/ r7 k5 _( [: V
  • 4 O; G4 `  p* {1 P1 U+ |

  • 4 T$ u/ J3 u; T7 ]) b, ]5 \
  • 7 a; k$ I' Y1 {' N, A: J
  • ) j: t) Z! r; F7 [/ ?% K+ P! k

  • 2 X9 J: R( Q0 H6 V  D  f- o0 p
  • 9 y1 c% H# z) s: z( e: i: G

  • 2 U. ~4 C/ u, b! n; J
  • + s" n+ a, ^7 e

  • 4 n: ^; t) y: B& R; e$ G
  • % Q; ?3 \. T; E: Q' Y, k0 F; w
  • 1 _1 \+ m$ K& x, B
    & N4 _# Y  o3 a" y1 G

######引入库包############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()
4 g* V/ W; w5 K0 @$ [

4 X  F6 K+ e+ O8 R

3 g- k! j0 ~/ l& s" }: m3 K
                               
登录/注册后可看大图

2 |( `: K- q, Z2 V9 N& T  P, }% v

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

9d9110a408fbe81329b7cfec01cfda76.png


  • 1 w7 ~7 ]' l! @$ [7 f  a

  • . t$ a8 [0 j# X+ G' }1 X

  • ) U. n5 J% p  v+ ?( k4 x
  • 1 k, @) F2 E' g
  • 9 Y( G: I0 @, }: z3 u/ q

  • , f, C! ]& E( j+ v$ ?/ O6 X6 Y$ s

  • 1 L, _- u; R9 E9 g5 d2 v
  • ( a& I5 p; z, o8 h/ \
  • . Z+ m' h& X" n+ t0 v
  • & y4 U, T& {1 r6 r9 F5 x+ h

  • ; f, p/ X% T' D) `

  • + a3 D! T& f+ L/ \

  • $ Z& M  J9 x# X. Y/ b; ~

  • " m: E: V! |+ v# V' f

  • 9 q  M, j6 H+ a5 D, p

  • * f4 V0 z. z( v+ E
  • 1 R( p7 r4 c' |! N' O4 ~7 G5 M
  • + X: @' ~  P8 f
  • / {; \6 w2 J8 ~1 o

  • ! O2 x6 L& l0 x* J8 U) z

  • 0 N( a6 d  t8 `/ L
    6 I* K& ]- e! L, A7 L1 a' 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 = 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
快速回复 返回顶部 返回列表