[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("···")


    5 x- |9 O. @5 H# o# D

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

; s. u* K- P2 L, \5 }+ n
/ \: ]9 B& F4 ~* H: r# L

绘制简单气象数据图


  • / H$ |8 h) `& A- t/ C
  • 6 `" y. W5 u2 C
  • - |& K1 |9 \% Y) ]$ T6 Y  x
  • % j" q5 p. \$ k, u9 \: o
  • 8 g1 J2 _. J+ j# {2 {) E
  • 5 y5 Z) P9 ?5 C0 T5 N" u" T1 D
  • : T0 x9 B; d: U  t9 q- Q2 h8 m7 B+ |
  •   n& T5 Q. |/ D( e$ P: E( _

  • % {% ]( u8 O. \" ^
  • 2 T# z6 J- Z- g2 k  w6 b/ c
  • % E" \: I, u; N. l& H

  • $ o4 W7 w1 }- o- C6 a

  • + y) A" a9 L: z7 A9 o  e

  • . l; t* E' D) X% x% d7 r
    ) P6 i# ?2 x/ `

######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("画布")6 t$ B/ L' H/ j

3222ca850649b6f730a155691403ec39.png

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

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

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


' F/ u* Z/ {, ?4 [7 h                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • 9 e: t4 f8 E3 J3 j' F0 o
  •   }+ h0 `9 p8 i8 L, u8 a. R
  • 9 H# [' _& q2 ?0 S4 r$ _: b
  • ( ]( u3 P5 s3 _# ]- U

  • / |( A' }# h) i5 i& R- j4 A  @, b
  • 3 D6 [0 x! W4 t$ i

  • + Y& f# }) r9 F. x4 w8 U

  • . Q7 m  F6 g4 s6 X5 d/ K

  • & R8 X+ T. ~9 P- \" v( a" E' S
  •   L$ c& o6 A8 O& V* ^
  • ! K8 L8 N; s7 ]

  • 6 r/ E% E7 H" O1 T+ O% J
  • $ {. S+ x0 O( K! y: W+ I
  • ! F, ~4 J9 [- r1 W6 u. Y
  • " J% o' X7 _6 J8 m. }

  • 3 l6 y$ k4 Z: u5 U" K

  •   ^* R1 [2 ~$ |. n
  • 1 z" o8 p$ X/ S# _

  • ; b- h0 F. \4 d5 D  p9 _
  • $ U4 b- S3 I1 I2 v

  • . s; V: W7 c7 e0 X4 c/ H

  • & B3 ?9 e, {" m5 [6 x# o
  • # g6 K9 P: [) X, ?" d, [; e

    7 v+ r/ Z2 {; K  ^! C

######引入库包############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()" ?7 h+ ?/ \* A. r& e/ o, a$ W


1 x% S; J4 [) L: [

; ?7 X& a0 R8 n+ x$ q
                               
登录/注册后可看大图


! h% `, O* s% w6 {: S

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • 5 U- G+ v  B& R. X" e# G

  • 8 d2 J' `/ u, E

  • ) q6 c( ?2 j* p' _" I4 ^% c

  • ) L6 o6 Q( Z1 W& q9 P* ?0 @' }
  • : e% g7 O2 @: N! j: G2 ^1 Z) Z8 d" b. v

  • 3 P8 r8 p, h$ A) v9 W
  • 9 [6 ?, J- X  g7 M/ F/ w

  • # X" C4 S9 {5 _; L0 ?8 c* G
  • 9 N5 f; J$ G/ I6 I: [; I
  • * S4 F9 W+ a9 r% f0 B. b
  • , X6 S( i' e$ |. i. ^6 C

  • # m; e" ^5 U4 N9 R# f

  • ; {9 V( P' U+ B- V5 s
  • - I! i! `) d5 t: t  E
  • / Y0 [8 S5 r# T' ~% b* J: D

  • 2 f% g4 O! N6 C3 w3 |( Q  ?

  • 4 U" e" m- o, _2 b
  • 4 ]  `2 F' b- R$ m+ X4 }4 K

  • - s. `. ^5 n! ^7 F1 U( H5 a

  • 3 b) j4 {5 a/ ?" p
  • ) I# y/ G- N: _. h- j

  • ; X4 |- _; q( y! N
    9 [% Q. _! R2 [' d* C0 ]

######引入库包############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()
* s$ [! T$ j+ t


# d! i: }) i5 a$ z& ^


& {- o! W  o9 [% x3 i                               
登录/注册后可看大图


9 L. @5 Y+ n. U6 ^% @6 u

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

9d9110a408fbe81329b7cfec01cfda76.png


  • 0 b7 S# h3 Z" `
  • 8 y! @5 L2 r- C2 V

  • # p5 P) m# O$ o+ k( j# B# `& v
  • ( @. H9 ?- i5 e/ g

  • 5 }! b7 J* Y. I  W% I) X: m. A

  • 3 w2 g. h0 W. ?" W

  • , }0 j4 G+ k) p: o
  • . z, c3 r, q3 q! ]" I4 U2 i
  • ; \0 c: z7 Q+ Z/ e
  • ) q" U  o' L2 F1 s+ Q3 M( i) t* }
  •   s" f  a, G; e# N: D! n

  • 9 f: j) x8 o# n) j& j6 y  n  A" {
  •   U6 X: b( d; A

  • / m& E( V% [3 V
  • ! w! Y9 X# [. k

  • - p' _" x+ O6 ^# V' ?- T

  • ! \" j- N+ o' s! T, d: _2 x/ T

  • 1 w$ x5 I. H0 k# l6 v

  • 1 ]  {: @$ a" i3 N

  • 5 v/ W! @% I4 Y/ x3 z

  • 0 l5 v6 a5 B  J' V/ h; c# |3 ~% t+ ?0 P# u1 B# r9 H4 x

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