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

    . I0 P2 Z) g- {, E% e

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

5 ~$ A* ?# }" q4 b
* \1 z$ a% a+ [# b6 W& I

绘制简单气象数据图


  • ; a% l: @, @' v) V' t( W; r
  • 2 F$ S1 F1 Y& X2 u" K
  • ! b& y& \& N# ^2 v
  • 4 |3 Z" f. G5 M0 R

  • ) {+ f$ P7 J& r  L: F/ H
  • ; Y  l" j; v. t8 K# p0 J
  •   g+ \2 i# X+ u* y
  • 8 L8 r4 \- ?& w7 O) r

  • * i* H3 u2 E0 N5 y* u2 o

  • - @- _9 r' k; ]6 ?( b
  • # ]" _- E; C( I/ M4 o  |, M
  • , M+ w4 Q* f& G! \7 f# w# ]

  • ! V! `) P7 Z9 l" d; m5 B# n

  • 4 L7 H- D  _' ^* P! z1 M& m& K7 a: z6 j  s/ `

######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("画布")% j, W- c, g) k1 N1 _7 R" o

3222ca850649b6f730a155691403ec39.png

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

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

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

; u% x' |; \8 |1 [! i
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • ( f0 H/ b5 C7 m3 {, p6 H0 g2 I
  • 8 ]! e% r5 p3 I! S; Y" d. {
  •   ?7 f  l5 b; W$ G$ {+ J6 N

  •   q4 f+ Z& S( Y" W: a  z

  • . U/ l+ ], _* R3 ^: J# U
  • / [0 [& p9 m8 W7 ~5 [2 Y
  • * X. q/ W( [0 U6 s8 e: h
  • 5 Y2 K3 T% }  i# T* J5 q. J
  • : X: V6 Q- t6 f, C, m

  • 7 o7 L) m0 s$ U4 _
  • 9 L7 L8 k( ]+ @1 A& X% q2 _/ D2 ]; c
  • 2 ^' B' {7 N% E0 ]. `: {) H  i

  • . n% P( p* D6 a& [6 k, g: g

  •   e) w2 R( M; m+ v2 v/ H& o

  • ; n5 \4 f. l9 A" v2 ~+ P! d8 u, s
  • ! q/ F" K% V- _# P1 \) I5 D

  • ( ~. d$ f: s) N9 Y/ h
  • . X: A$ O+ X* `. {4 ?- ?  y9 Y
  • 8 ]: [7 V: I! t/ y; p" }8 ~
  • 4 i+ z/ ?) v# G" p( e0 g& X
  • . j( |/ T3 b. H4 }
  • 9 |; v& b! q2 `, S2 G8 ^

  • 8 @( {/ h/ A- ^1 ?. C  }4 ]5 B
    # q7 ]2 i; D8 ]* f$ q

######引入库包############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()8 a. V& d2 i* z! E


/ G; r7 H" X- e- S6 Y; v

- |& v! B' S9 U9 N. \' K
                               
登录/注册后可看大图


( C2 z/ T* p  L+ p8 V1 ]

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • % C! M- Y$ D6 R) `  f# H
  • 7 j1 o. m' o6 S. d( x5 i6 _1 x

  • 5 h) P( q4 `! p. d

  • 8 I: \% D1 g- t3 ^/ E1 i
  •   @  O- g) ]% S& T9 H; Q6 O5 h

  • 9 ?" S! H  f% Y7 X. X+ c

  • - l! R+ E5 y3 h; C  T$ u

  • : L8 B$ b5 X4 K$ r
  • + S* v9 V1 i& T) m% _  S: R

  • 3 `2 {# ]* g  k1 S& ~
  • - s+ o) M  L% ]! E3 |) B" H

  • ( |) \) J9 h1 z: B
  • / z8 H9 ?4 Y+ i$ B+ p& I

  • : o" o6 c3 j, k% n0 U( B

  • 4 `: i! R: i) y. D, G* k

  • + C5 J- t! l2 i2 d

  • : j8 o! s/ o# H6 G2 v5 B" y

  • 8 m, W+ [, c7 O* \  @3 v

  • 7 R: T- V) O1 v0 b/ }9 c% t8 y

  • 9 _) ?6 I6 W* k& l9 U

  • 7 [$ O% p0 {  ~

  • + F" b" J- }/ h; h7 ^' h8 F1 z( @4 Y3 W

######引入库包############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()/ f  ], [6 U6 l" Q


, A" i. c- N" W# u" J! E


8 _8 z  H5 K/ N. N# M: B                               
登录/注册后可看大图


; ~* R2 {4 s# a9 \0 r! G0 P8 }: G

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

9d9110a408fbe81329b7cfec01cfda76.png


  • ) W6 s  V7 \+ W% X
  • # Y9 r1 J+ w4 B/ {
  • # t- I; T$ R6 d
  • $ \& L5 o8 A8 P0 R- b

  • 1 m# W6 @* B& `5 |5 y: ~, g
  • ; O; }  o0 Q3 l3 v+ q+ D6 w6 f
  • 4 E5 V0 Z2 t+ y6 O; w, \* }5 N
  • , F" q" x: \; p! M6 q
  • ( _  q8 V* D! K

  • 5 M5 M& l9 P7 F( U1 f! o

  • : F: V* X5 B( `1 C
  • : v2 o3 L9 U* O( o0 r# K/ A* k
  • 0 g$ d9 f& i  y" u) m
  • : j7 ~. V; |) \% s2 U- |

  • ! Q, z# e! o9 Y+ b

  • $ x& u  W6 u3 d9 L4 A

  • # t* q& P* ^( \. i$ [: B
  • 2 Y$ n; g/ X, `( e: m9 x
  • - @% _, `. R$ m! W

  • $ c8 }' u2 P* y7 w- a

  •   L- O8 V  q9 ]9 }+ {. ]  t8 j, ^" m$ y# w

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