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


    : Q" c" I* b# H! H/ O* |

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


( @1 U. I3 ]/ J# q6 {6 P0 n
! e* h0 I' J/ o7 }4 E1 X  C# B

绘制简单气象数据图


  • 3 u& [) }! u# h
  • # r5 m' P; D: _7 B$ L
  • 9 S1 O+ A3 `$ r

  • # q$ C7 i6 t( Y" q7 h; L% M
  • # |3 [2 M) k! L' X* ?

  • & K! T# L: _$ {" G" i( J+ U, X  m  O

  • " i0 E4 Z  Q7 }9 s) O
  • ; F( H' u- k0 _
  • 5 ~2 Y5 |' \$ z; v
  •   M3 |0 h5 t; z! ?

  • ! b: @7 l' t9 q' {* E
  • ; b8 a/ c" v/ ~

  • " \+ q4 p' O6 z7 u

  • " a1 |* W  M8 [, ~# F. d) f5 O: g* f+ z

######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("画布")& a" e' f, |* a, F5 d$ q

3222ca850649b6f730a155691403ec39.png

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

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

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


9 ?8 ~* G% {2 X% [+ j  w                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • 7 i8 e0 d4 N) R& z; R: ~1 B5 P
  • 8 @7 Q3 ^2 S  B2 F2 D- u+ J

  • % D: P7 Q8 u/ b, h2 Q

  • * S- Y% V8 B' n& }; w

  • 6 q0 A- K' b# E: A/ }7 G

  • 2 k( c* r) h8 r
  • , }( s3 S5 \" o, l3 I; U
  • 2 S# {5 S. r4 A- O7 y/ r9 W' {
  • * |; ^2 n$ B7 \% a; L) ]
  • , B2 Q" [  [7 S7 N) p
  • 7 A. a$ c3 F6 T; z3 X/ M
  • 4 G  v( S6 p7 C1 z. j. w
  • # d6 M: J9 u" h9 O

  • 8 Q( o/ u$ {8 J2 K

  • , R# P6 U) b% f2 ]  O4 H( \
  • - H3 r* S; s: U; s0 T$ n

  • : L5 f' `4 i  ?0 v+ A

  • 1 Q0 X! @  K0 d& G" _

  • : Q8 g8 D) e# Q" _8 t
  • 9 s$ l3 q3 v' D$ O- X, Z0 r" i

  • " e$ ~' r! x- ]& e

  • 6 Q: N0 T" @4 F! G: N/ ^8 s. E, }4 O

  • * X. h+ s- p. t( W0 ~2 \
    ( o- N' C2 N+ k+ q7 w) V

######引入库包############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()" S: s+ }/ D: n* G$ U

9 z9 s& y& N4 t

) p0 {& Y* D5 j- @# N$ R5 g1 u, @
                               
登录/注册后可看大图


) X5 S7 C" c( c/ b

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • 9 f  E7 i3 i: e  s' T

  • 9 F& [- i+ V/ h/ S/ v

  • 0 ^0 m* I9 x: z# G4 p/ p' o/ c
  • & y, z4 P6 E( S6 K# H

  • 3 d- `, K* X/ d* D

  • $ Y. v- B4 w4 ?: I

  • $ d9 h& l( o) D
  • 8 N* O3 Q1 q1 R. O

  • : k+ _! |7 m: ?" |8 A) M

  • 5 x1 u! y0 t1 g& ^( P
  • 0 P. O  m) I9 y! |# f
  • 2 `, @. z+ Y, M! E; C
  • ! L4 ^3 H% x, O# h% j: _* g
  • * V! O$ c. m! P/ x% ~: s9 G

  • , W% m% V* q2 f( U. D1 ]

  • # A! E2 I1 f& P  A/ T( Z

  • ' r6 o7 Y- u8 j' l. U
  • # ^  X7 U! F8 V) h) f

  • ! E5 D8 x, G+ Z; o

  • / x( j, d# _- I. p- v& s& a

  • & q1 Y# G/ [8 P% ]9 R9 ]" H
  • $ W  V( S) s1 S* _
    6 b! r3 @4 v/ O) f) m; 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()
1 u3 B+ d9 [& f) X# x


; J8 ^& I/ u! g' O- x

8 g4 o1 l: d) L  c
                               
登录/注册后可看大图


3 ]% T; x3 c7 y  O3 k6 n

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

9d9110a408fbe81329b7cfec01cfda76.png


  • 4 n5 e: A- Y( Z# s* \4 M8 Q# X5 H  s
  • 5 C' Z3 ^" S/ z5 g

  • 7 x: X* A7 p/ m) S1 Y
  • 0 ?$ n6 G8 u8 [) {: F, S' S; b
  • 5 [" E, `8 R6 x1 K& R
  • 1 [. t4 X4 H) Z! H

  • . r. [% |6 X% i) T2 x  \7 k9 Z

  • , B' ~$ _- [( A1 h' c# n
  • , x( X& O0 e& N. A& }4 D

  • ; R( o/ C  Q! B1 I/ B# \* Q( A

  • " }! h( k* L; r4 u3 n

  • 9 F' f1 G/ ~6 _6 w# a- R2 L

  • ) p; d' X  b- x4 S  H
  • 9 I0 _. {6 [3 [2 o1 k  ~+ E: v! v
  •   O" l) ?9 c. s9 Z5 j: W
  • - t' N/ n8 N# w+ ]% K  M: |

  • % k6 \" w9 E) {4 T9 B4 X, k

  • , N6 U0 ^0 B6 ^5 J) X  o" t2 r

  •   M- ]( d% W. x( E, G, a% W- ~

  • + f$ g, |1 W# I( ~1 `
  • * |/ q" }% c8 s* Y- i2 z- o; b! O

    & H& W/ E4 i7 G; k9 E7 k1 Q# n

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