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


    " t' _1 \6 \, `1 w

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

% P, u6 {; ~" E+ f% [+ G6 F6 A7 V

% `2 S: h! e* e" w) p& b

绘制简单气象数据图

  • * `9 a/ W0 g/ d9 t6 Y5 S: S( E

  • 6 W0 _; e" b* p  a
  • 4 N2 j! i  _- m. E7 a% v' }
  • , i% m9 G- k& w$ ?; \! A' @( a6 o1 D

  • 6 x- Q1 U/ n+ {

  • 6 K; H9 A0 V( n9 ^5 ]

  • * Q6 ~* A+ a7 _/ A1 v* M6 S* M

  •   Z. O* o: p7 Q0 g

  • 2 O& j' ^* d) B/ }) ?5 E

  • 3 m& n7 r+ H3 u- l

  • 0 I, e& M% ~0 ^  y( r8 }  A, e, [

  • . F+ J2 I" ]$ \. I1 b2 s

  • 7 M+ c" I- F" O2 k

  • ) _8 a- W$ ~- p/ |1 }6 Q" _  h, ]! c5 Y+ C

######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("画布")
9 w0 _, x7 B, M3 N% t) {+ N

3222ca850649b6f730a155691403ec39.png

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

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

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

8 M5 D7 h( b4 Q7 w4 h
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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

  • / n0 _- T6 m4 z% E+ C

  • 9 i$ m, `3 O9 J0 n# I

  • $ G" j+ A3 j8 x/ h

  • % G( N' _! Y. U3 ^" U& i% X
  • - W& I+ W! d- S, X: G

  • ) m# E/ O  B/ w8 b6 m" g' K( g6 M

  • 5 J" C# C0 l5 h& p" G0 t$ M
  • 3 k4 O/ l- h; S# X7 a2 c! _

  • & i0 }2 g. k/ Y" r; ]
  • ; K! U; e7 }/ V4 J

  • / L9 n- ?0 m5 h  N
  • - g" Z$ a9 h# r) u: |

  • 8 V* \! W( m8 G
  • 2 g& X4 _8 R1 |) `2 t% U5 p

  • . R. s4 S4 ^4 g/ f
  • " O0 v+ N# X# s0 |( z

  • + ~1 K, |0 e0 H8 Q( W  p
  • 4 w% R6 Q( M6 t' I2 ^
  • ' @. d0 n3 r( l, |: N
  • - `# U" g1 P+ d/ m$ q" s

  • . ~7 G, |6 Q% u. X+ n9 _/ d

  • 3 P! I! d, T' [2 z% j

  • ) a- Q2 |: }, C4 v3 h  f' B6 f3 n+ U/ s4 q5 s

######引入库包############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()' M8 a2 T; k6 F* j


( [5 W* P2 O. {/ H/ j


1 c6 B/ R5 Z( }# @0 J, @8 z                               
登录/注册后可看大图

' t, q3 X" l+ m

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • 8 U0 P0 N& M3 Q. ?! d; A8 m/ h' {
  • & E; Q7 P. L% N, z. [& S6 W

  • ) {$ Q( u9 Y( q& P6 }6 Q1 {

  • ! ?, n/ Y3 R* H. g" L
  • . i/ z( f1 r7 J3 L+ B  ?/ m0 P& D
  • , e9 ?* H. H- o1 _! o9 O  r
  • " g  g  B) R$ S; y6 e( s% d8 L

  • : t# }/ x6 l" W: s
  •   A9 Q4 K4 a- j- ~1 L( ]
  • , \! O3 k; t( i, r$ U: Z

  • : ]7 Y8 _0 }0 X, \8 O: e

  • 0 J# j! F0 S1 _# l

  • 0 j( c& l6 p2 C% X+ m

  • 2 t+ k6 t( ~4 N1 L+ p; Z$ Z7 Z

  • 4 Z1 l4 S" V; [2 |

  • 6 ~8 I5 b- E7 ?6 z

  • 3 d1 f  J2 \) h' O
  • 5 R1 i8 J- w  `
  • : Q5 G* B% ?! o$ a1 i" r
  • 7 A$ I( Q# e7 v5 c+ @
  • $ V9 B- d+ `% z  g8 K

  • 0 \/ Y' M, q3 c# a& Q/ t' E/ m; W# k/ G4 t4 j. D; X

######引入库包############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()  z1 W8 \) I3 Y, R0 P, T: r


1 u6 c. u6 N! i% o2 t" W


4 N, y, ]" ?3 Y9 H; z) f                               
登录/注册后可看大图


) ]' v, o) z, [

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

9d9110a408fbe81329b7cfec01cfda76.png

  • & J) C+ q! q, n0 k8 s7 A7 t

  • ; ]- Q. J- }- B9 u8 {+ X/ A

  • $ ^( w9 n! y  ~) N3 \( u
  • ) E9 N' U0 u/ L# w

  • ; @1 X* |$ a% G& w

  • ! M9 N0 ?) S1 M1 j- x

  • + N) z" j. L7 W+ [2 F

  • * y6 [5 s* D  z' |

  • $ c9 [4 M8 d' U, c# b: ]

  • ; U# [0 x9 Y" c- T1 p

  • % M4 K, I+ s1 t$ b$ z& o

  • 8 {- E$ H5 E2 N& x
  • ) w; `) ]& v* O, T

  • 5 s- L- w/ _  k& Y
  • 6 x* i8 p. F5 p8 O

  • 6 M6 }! y+ U* D# U: c

  • # E0 X" `2 o1 q

  • % D# I0 \! m1 Z# A, J! V
  • 2 s: D$ K( F9 e3 V: H' U% c
  • 8 }6 s3 j& H/ ?( T( `! h! z7 I

  • - L; @& o6 E$ C& ]( `/ g/ Y; G" n5 l4 C3 e* `" [

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