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


    : @# ?' S" [" n# ]

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


' ^8 N( b! @. t) j4 C4 L
& L+ M* p" c3 a9 P. [

绘制简单气象数据图

  • 9 d$ ~) s0 `1 o5 @7 N; M6 d9 B% b
  • ( \: k* ^7 B0 y1 o  H! @7 i3 X

  • $ m% X8 |% C9 Q/ ^. O+ J  G3 |* Z

  • 7 y1 x. d4 e( t+ {$ U1 [
  • . @! a5 o6 ~+ z  X7 a4 A& A

  • 7 t( O& R+ X7 A1 z! D, q

  • : e% C. [  r" d3 O
  • 6 T2 a. E9 q2 N+ a# a( [- y

  • 8 q/ |: [9 `+ _: u2 C+ G2 R6 K

  • 1 y1 Y; \+ w7 l9 W  u! O

  • ) i, T3 g) e1 p% e* g
  • 9 h+ [0 v; O- s9 A* _4 @- ?, j+ B

  • , D  a; m0 d" S) M1 V3 c4 x3 c

  • , G9 @! X# t( [* N) ?3 u
    : C4 ~: [5 R" }

######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("画布")
5 n. a* H! ^( f8 l6 v

3222ca850649b6f730a155691403ec39.png

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

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

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

. ?, m3 t9 d& s8 H5 ]5 k# g
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • 9 m) {6 K  _# B
  • ; f9 @' R. l; g( E1 S( K$ X
  • * S6 ]" B) s: q& F8 ^4 W3 i

  • ' m3 U% n& e& {) ?
  • " X5 j0 Y2 S; A" u& t1 G
  •   s- h9 g1 ~5 E# X

  • + X- [$ l: ^* |) f% e0 E4 {* L
  • & [, v6 ^8 K) @4 }$ R/ k) \

  • + p/ y$ i1 ~# N  }8 b; B0 s7 y1 L
  • 7 [" y# f) a) P; v2 ?
  • * K" d# z$ x' N* C8 w2 @* ^. C

  • 8 ]9 e; Z1 v& C# Q
  • $ o, H* E/ Q8 w; b3 t/ \8 k

  • % ?4 [9 K* @$ F" Q  v1 x0 U# T

  • % J" M; f/ w/ J$ v7 o/ E) W/ X

  • $ b$ \* k& E" v0 V
  • ; V% L0 V* a, ]" |" ?; U" b

  • 8 x: ?% N  Q& s

  • - O; q2 `, D+ u0 y% r* J" c
  • * w' r$ Z8 B( k
  • / X; `0 b; j; Z1 w
  • - p* }# ?0 [& {$ Q

  • - T& I6 u8 f6 m- Y8 c0 }; P, ?2 F2 o, d3 `8 q. b

######引入库包############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()( \  _! c8 M; M

" R$ _0 X4 c' o; r/ x* S) I1 _! [6 E


/ L4 I5 \7 {7 ^/ }# R8 i                               
登录/注册后可看大图


* U* f; V' q2 Q

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • % M" U, y' i; x+ H( Z
  • 3 b! x' w' ?1 Z+ f4 \

  • - d6 p4 t0 E% c+ ~4 X7 t
  • 9 K  {' u* B2 o

  • 8 h) ?3 I$ e. j- A, Y% O5 A
  • . u3 V6 K  o5 e
  • ! T/ y& h! @/ j$ B6 G' f

  • / J( Z" C# P% B+ a1 a0 A

  • 5 E! Q7 O2 k2 c- K

  • * a$ b* ~3 i1 v3 P1 I: d7 D0 p
  • ' i6 n' d- o' a4 h; ]5 f9 t3 J& r

  • 2 d2 C# ?/ q) B: U, {
  • ; [& D; R& t, h6 F* @

  • % ]0 E8 H# B" z7 D
  • ' h6 R: d' F  \. K' T

  • ( B$ ]- \' i, F! o5 k) d% J; Q+ ~) C
  • 7 M+ ?6 ?/ \* t* P- y$ p) D
  • 1 [* w4 ^- d4 z7 [
  • - G. n5 M' h9 e# f7 y
  • 2 q2 b* I; _! @1 x2 G0 w

  • 3 V2 x% t* o! c
  • + Q; d, P* y2 ?- a. ]* g" r3 r9 x8 B
    ( I( d$ @% d8 }( m

######引入库包############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(), p% y! r9 e% M( f7 Q

; r6 X+ [, f( m- O& h6 {

; ?0 M7 B- C0 R+ Y
                               
登录/注册后可看大图


  C" l6 [! W4 C

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

9d9110a408fbe81329b7cfec01cfda76.png


  • - v/ c3 _- R0 ~( Q9 ]2 _

  • ( C$ Z6 y4 i9 W1 l% T

  • 9 x4 O$ p' Y. z" q" x$ \/ L  I0 X
  •   K9 M6 f4 U1 W' l" f# l
  • , G7 B& V4 I  x+ q0 n% ~8 D
  • 2 t. A- c. l) Y  [6 F$ N7 a* n

  •   s% t0 I2 s6 a, N' ~% c* _

  • ' ?% V8 {2 Q" q/ g" m

  • ; Y- Z$ h8 s' k/ X1 S  \
  • 0 w, @7 N6 Q8 H. t

  • % Y& D- S# t4 ]/ ?; v, a: z

  • # Z% E4 I. v+ L0 s. ?7 d; c" Q% m. p" f
  • " M! {  s2 x' H+ [; q
  • * i/ ~6 m( H  p' G+ ^) k" n* u4 d
  • & S8 ]" B  k- ]' G/ ~% a0 x1 Z. ^

  • ) h  j9 [5 i% P# u) P/ q

  • & U, J: ?1 O7 |; f8 g& t

  • # X4 Q3 X# u" C1 H  M9 l5 H4 P

  • 7 S' q( q* Z: ^2 ?

  • . r0 S! o, g- D1 S1 |& X

  • 2 F. G* c- T' ^( A- p
    , C6 [/ E: p* S- O, k5 o8 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
快速回复 返回顶部 返回列表