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

    ! u. g$ ^3 e) [0 h1 g6 J$ D, g% }6 T

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

3 Y! s: M! O1 q( f; D* C
; y" i7 w& G" V: }! z5 s# Y

绘制简单气象数据图

  • 5 |3 _0 M- l# ]- C  c& v! r
  • * S! @1 n; }9 K' x: K; q3 F& z: P
  • & _  k$ J. Q+ X( m

  •   g+ A9 d1 k; |, E! t1 t& A- ]7 Z

  • 0 W7 p# C" A2 Q! J" b

  • ( ~% o2 x& h) e+ o5 n

  • " I" ^9 J* c. K* l/ f, v
  • 7 ?  l; }  ]0 S9 e  D' G$ j
  • / b# p" D% r1 h- R' V

  •   d( [' |" f; @( `3 A4 j7 ^* d

  • 5 T! S' C3 r- r" V0 C

  • ' F/ @2 h9 c' E2 n' c; C

  • * C7 O+ e: N+ C1 k' o# V" ], J1 ]
  • 7 X" c; j$ {! f* d, O0 l
    5 C, A- [" c; ~  y

######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("画布")+ Z4 t" L4 s6 c& k; V: f6 I

3222ca850649b6f730a155691403ec39.png

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

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

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


- C6 q8 I( n  \$ Q( u( ]                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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

  • # `' u2 f% d8 N: D5 R
  •   I/ G- Y7 q! j8 ]

  • + L) S  p( g  D- u
  • 5 H1 Z3 M# t" A* B5 U) i

  • / v' e- `( m3 }& D) m; |4 W
  • " `# o! |5 q3 N+ n8 F
  • 6 i! B3 V1 }. P/ S  |/ `# W

  • : w  w% ?! U% S

  • 7 l$ ?3 M0 M2 g9 ?# k: j

  • - {& M- M6 W& ~" ]) A9 l, }
  • + E. x3 K, h& g; [7 u; t
  • ! Z$ {' N3 g; R4 z1 T( B, N
  • : _8 l, J% ~1 e9 Z

  • - m- Q% c& ~+ V6 F! m  d* Q8 [

  • , i4 I3 N' u; X* u: R
  • + J# G( e1 ~1 M
  • 6 ^( N2 h( u% ?: N) {
  • 3 @. y: t0 t( p/ _% j3 V

  • ; L3 r4 }, j: D. H$ D2 Z
  • # T0 ~! [- ]" P" p! `
  • 8 ]) u- t+ m, E! W9 \, c

  • 0 ~+ X$ p" O# L7 P! W. R$ U0 W
  • ( V' w; q1 ]7 i) o$ Z/ x. K7 v

    $ M1 l4 R0 l' T+ f4 J$ t

######引入库包############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()1 }8 t- M- _; w& G3 Q5 Z


" @9 z; a% Z% }. T% C% z7 _& W


- ~6 q! U9 r9 a& p2 Q1 p3 M4 r3 t                               
登录/注册后可看大图

8 u% F+ `( ^) G2 I

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • # o1 D% K# z7 H. y
  • 6 e( Q% P/ c/ n& K- i3 o* l9 N
  • - X: {4 |- l, J& o1 ~
  • 0 f) I8 z3 p) l, z; _8 {
  • 5 M* N  a( ^% V- F5 B* }) [

  • " y. s# b9 m( ?

  • ( @2 Q" v( @5 |' u8 {) E# C
  • 9 a1 ]& k# c% t  J
  • ! w- d# b7 A' {& b
  • / y- D- }: C/ ~- k

  • + a/ J, X: L1 `; Z; M

  • ; R5 L4 K) u  {7 R; Y  J  D

  • % Y- @( y/ x0 C6 r- U1 ]2 |/ K# R

  • : B2 \8 w" y! Y. c! z3 J

  • / b# m& ^4 ?4 a0 g0 ]
  • 8 J- w! K5 S# x4 c# u; X& G
  • 5 f( e2 X% X- `4 n

  • : G0 a) c" \; y& ~; f( c/ ?
  • 9 g) g; V' Y! H1 s; w

  • ! M5 {" N7 j; b8 c/ n
  • . m& }/ Z; W  m. X" O" i
  • * M5 Y5 V; r- \8 I+ d% |
    3 B. }( U8 C9 _7 h( }

######引入库包############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()
0 L$ x7 D5 F) r5 M8 A


2 q: v; c1 O6 ~8 d0 l8 ~, u


# G0 X  `. {& _( J" a2 w8 X                               
登录/注册后可看大图


: B3 d- L6 s7 B! v+ f: Y

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

9d9110a408fbe81329b7cfec01cfda76.png


  • 9 Z: r% b/ Q9 A& L9 T
  • 4 w. N' K* N, u" A/ X

  • 5 U/ `; L' Y: j

  • ' L4 a  V$ \  ^3 p6 Z1 I
  • 5 O2 ]- P% U( [7 F% c
  • 6 e. H. [- X! E) S6 Y% X6 x2 x

  • 9 u, b8 x% q1 K8 f* ?) [

  • . G. A0 O! ]5 N3 T& R/ U
  • 6 X- S0 D7 X+ m; }; ~
  • 9 F5 T# q  P1 i* O2 p8 ^4 L

  • 5 D. r% T( X" Y

  • 8 ?1 m  A$ t5 O2 O  t% K

  • 3 r. X+ I6 Q& h) l' d4 [5 R

  • 8 I2 R% x- t6 c# d1 }& I( h
  • ' a. C) r% C2 O' c; T- u/ X

  • $ m/ J- T6 E+ W1 T9 }

  • : `: V0 M' [, F! L

  • * R" j% L& y) Q$ M( V$ c

  • : K) q6 ?0 g% Q' ^
  • 8 S) g; a* J; r5 P

  • ! p0 a- I( [4 u9 V9 \- |, }9 `/ N3 y) R

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