收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流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("···")

    0 b: ?( k3 ]' q& y. e) |: t$ @* s

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

+ ]) G/ f  x1 s, k

' a1 M5 k, s# r4 F! R

绘制简单气象数据图


  • 9 F' T: N" u& v* H- H( I' h

  • ' O5 m4 q! E4 W7 m' L: h6 T% A

  • - [# }/ ^8 D1 |7 f1 e: A

  • # w+ S) a& r4 U8 I! [6 Z
  • ) M4 b3 o; y- s5 I5 z+ c

  • 3 r7 Y; u! ~6 U; j. s3 }1 A

  • - @3 O8 u7 @0 W# \  s  c: q

  • 6 ^7 v$ o, N* y* q  `9 V

  • 8 N8 \" u7 w# o: I1 q- U% v
  • ( L5 X' w  N) S" F# W

  • ( a5 p, f' l( i2 H$ A, Z
  • - N# X& A$ {8 J* Q
  •   e5 O! O; g) o
  • & w+ e0 @3 `( r3 O! @* {4 t

    5 b  @; b( w/ S& v$ F+ a) C  |7 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("画布")
4 g: {% j- e6 M5 B- Q8 S+ V: M

3222ca850649b6f730a155691403ec39.png

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

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

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

, r/ _4 @! ]6 N! w0 |
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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

  • # o0 G/ n  {4 h. L5 U

  • " R0 |3 t- q6 L. z3 N* O1 `
  • 4 n7 ?. T1 N% j7 w
  • - r! o; i/ _, \8 A/ m8 z. ?3 j1 T
  • - Z! u9 d, x$ m: }
  • 6 [" x$ d- G3 O( n- H8 N1 |& H3 L

  • + C0 K* ^. f3 z' _5 z6 f3 z

  • 9 f+ s9 t2 T- p* y) m; G; n/ d

  • + [: _+ V5 ?6 X
  • $ b6 N/ F4 ]5 J* s

  • % F1 O2 G0 q9 s& ]' O

  •   h7 x9 D" ~& d( A! k. P

  • 7 n+ N6 p$ C, L3 v. `$ U
  • 5 D6 E2 u9 D+ P% v( v
  • ! B  @/ H; h% W
  • : k2 z  Y: k& w" L( a9 ~" N
  •   {0 f' \! O$ r
  • 3 h" L, J5 b8 f- o' H

  • + G: K# ~! w# A
  • 4 E8 O, V1 }1 |, w
  • ( J. v: N5 T: h  b( W

  • * a$ e# ?4 K( `) `% V

  • " G! `  N" Y/ y( y. Z- t2 G2 r" |- e" ?( [8 K

######引入库包############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()
' q/ k, E  [: u, _


( c. a7 V4 K1 |* `4 N


' z* A  ?4 A7 q                               
登录/注册后可看大图

: ?7 q" C1 H2 @% N+ R" {

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • % B0 X; X! M6 k; y. M: ~1 d3 G! ~2 J, D
  • . Y7 H* s. M+ r
  • . N* c( `2 j% u0 U

  • 3 Q4 j0 n6 u# b& H& z6 ^( |
  • 5 I8 A, b2 r. s  I  B" h9 I

  • & C. e8 Z' ^) K$ M1 N
  • ' N) {! _: p" T+ M7 b* U$ H
  • % X1 b8 [; d, H. I+ i
  • ; g' n, N( b1 \6 m
  • % z% ?' l* d5 ]  O6 Y* V7 o

  • . x, C5 N1 J8 f1 `
  • 5 h2 g. z( Q4 M# r: T7 R9 \
  • 3 n* w1 ^6 m6 M( _! T! Z

  • 2 `/ i7 g  T& b! d& n
  • / p2 {, A8 x# }- `  x' S3 e" t2 R, o

  • , J2 C$ n; x# J
  • , W# I* V! S6 h

  • ' y! j7 Y: T" N, `
  • ) Y. T! G- G6 ]& r5 j
  • ) `$ j( V5 F7 ]0 N

  • & ^  D; z6 t2 V/ V0 w8 S1 c$ v- [
  • ' D4 N  g: C4 ]- L5 J
    4 z  w& Q2 U7 P7 p" h/ Y

######引入库包############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()+ |$ Q7 n: H2 G- x

5 G/ d" Q0 R; [$ r/ Y9 [+ g


3 T( E6 W) T  _) s# B$ Y                               
登录/注册后可看大图

8 }: I+ D* v" b( V; }$ `% V

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

9d9110a408fbe81329b7cfec01cfda76.png

  • ; I5 ?. s! L7 X: O* `/ y1 {9 R9 }
  • ) ^4 l& v& _" f

  • / y2 J2 R. q3 Q. ^! B7 o( T- K

  • / C/ ~  h' @) x1 Q, P, H

  • " w; Z* f0 U2 W  _, ?* x

  • " C- @6 j' t, ]

  • ! T5 v  r$ H' M5 k# {4 p) M! l/ ]
  • 7 X9 |. Y% d& ^+ D& ~

  • - F- P6 }3 [- j& H
  • 3 N' s; z4 ?; [* d* q( d0 m
  • , s1 B3 P* l, @/ T: k" E; I" }# p$ z
  • & h9 K; x1 o1 B3 B! ~( |
  • 1 _1 a( q( b1 O/ N- u4 @) j

  •   M2 y" L; G4 Q( n) f# ]+ I& \
  • 3 l" p7 O6 @. E) [/ c. i- C; C# B
  • + a/ ~3 @6 l" F/ L# `: R

  • : w! o$ ?. a5 `: \4 W
  • , l4 w* R/ l& f. G+ M6 I

  • ! i. U* O) ]& K, p

  • + W8 T% k6 ]$ T1 X/ n
  • ( d& R# n/ Y3 _
    " e! s# T; B6 q7 V0 t& A" `

######引入库包############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
快速回复 返回顶部 返回列表