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

    ; v3 W; Q% T" v& p, _: v/ f

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


1 Z' X2 Y% q! ]! S4 w+ r- @0 v1 H# O* T# D

绘制简单气象数据图

  •   v# p) q4 x3 B4 @$ F* F
  • 9 [& ^# R( W8 o; \  ^
  • $ z( q* u3 a! E! C& Z9 _6 a

  • 3 \! F* w: Y' B% K& }; h2 G; h& d
  • ( y* D4 j: U& U  \/ J
  • 9 |' L2 f& g) }/ J3 [* _
  • ! O- l& D7 a. S/ o2 e  c  q& ]
  • + ]) g/ r) @) p7 P- t0 U$ b

  • 6 k7 I6 ]* R" U$ ^: V  E' l5 L9 ?
  • . l8 X4 Q( N  L0 P+ b! d/ t2 t
  • 4 P& q" m8 l+ S: Q# J

  • ) ]# a5 ~  ]: B) P0 D

  • ! w% d: N6 `0 Z$ i! F& \

  • ! A6 C% p* a7 \" [2 `
    . Y3 {6 E. L7 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("画布")
& x$ T" w" k1 O, l+ o9 M  D

3222ca850649b6f730a155691403ec39.png

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

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

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

9 \& ~. M% Q; L! j" u6 A2 e
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • & `' Q" @% {- b9 s) D/ A5 [

  • ! i$ p- R' J, ^3 I6 _

  • - c3 |( K+ e! K3 c
  • / q, D, _( b1 H) j$ o
  • ' V: z2 `' P/ A0 R

  • : I5 J" j+ `. C1 j5 C
  •   T% V0 T3 B; e' w

  • 6 G& g' J* i3 a- f3 R

  • - o6 `; q+ Q/ l- e' `
  • : \& y% B8 @+ U

  • 2 k: s# s- ~- U8 C% }. }0 K& U

  • $ ~: Z" c& B% i9 ~

  • * s* V2 a7 b% ]8 g, m- X

  • " K7 ~% x* F' J! w7 y
  • ( h9 z# |5 k4 x

  • 1 G7 ^* o" k1 y- i- {" D7 \/ P

  • $ @/ E4 z* w$ Y2 t1 B& t! c9 w

  • - H5 M! ^* V$ Y- G* A  k! H

  • 7 Y0 h" y% b* q" ^5 _- b# @4 T) H

  • 5 \+ ~+ A2 D, g2 J: ^1 [" c
  • 9 t) b5 I/ f$ B9 I

  • # V' H, `1 x, r% C7 q& s' h

  • 5 D( J& r! X* W! B  D
      G( q6 U. I9 |

######引入库包############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()
! ~! Y1 d+ g9 J( h& S

. D) ]" O. E3 q3 K7 ~, a8 I


0 Y! o& v2 z9 K                               
登录/注册后可看大图

' S$ ]8 U8 z" S& z6 G" x8 ^

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • . ~1 _; z) B8 |$ U9 L
  • $ t0 I- t/ [/ M
  • 7 k% F* V0 }" Q+ S/ H) Q

  • 0 X6 c$ }8 @. o! P, P3 o
  • ( F5 G' B( v: d! {' S: Y

  • 1 Q6 {& Z  B/ y0 t0 U3 A3 e  d

  • * B2 W% |% k6 Q% g
  • 5 k$ t- C0 p- w  v2 v
  • + q# R2 l4 P* y
  • % X) C- p: @9 R0 u: {8 b
  • ! e2 W7 i% {& U- R& f
  • " |$ _/ b; d' [& R. {; q3 \4 y$ K2 J

  • . j2 e0 i7 J( l

  • 7 e1 z* d4 o$ L  z
  • 3 \* N) ~& V8 O8 {

  • ! H! T6 ?: V8 `/ S6 B6 z% z

  • ! U, s1 B# {( v: w

  • ) A+ g+ b; B* x  s# \3 s1 H

  • & j" z* d6 N% ]. o  Z; }6 o

  • / V( o! V4 b  h+ Z. J; X

  • ( I; x$ Y: i5 [' A* y
  • - Y! w  u1 j0 K, M* ]

    : E6 U  k$ q4 o2 q; l! q  g

######引入库包############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()
) y7 @: d; D1 `

1 K+ ?9 i8 x3 W


! p& S9 T, b5 a  w! R3 I                               
登录/注册后可看大图

" Q& ]2 `6 P5 Y5 e3 x

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

9d9110a408fbe81329b7cfec01cfda76.png


  • + x; e' M( Z/ p* f, ]
  • 7 f% o6 L- n& n4 e+ {$ x# A" M
  • ) S5 Z1 J$ E8 V; F1 r

  • 3 W$ O( s9 e9 _2 ?7 n+ \% ^! U' R
  • 3 ~% }0 a9 {1 x! [' I

  • ' l& i# m& j/ B+ }
  • . X+ y: t# b3 l  ?3 s% t+ Z1 i
  • ) `* h2 [4 }1 K9 c

  • 1 P7 F) l$ ]9 r- S) v: e$ R2 ]
  • ) S" v9 U' ]2 V* W: u5 _, ?

  • 3 K3 q, s8 H/ b3 }$ b4 ^5 S. q- d

  • # w4 D8 `% w4 C+ g

  • : _# J. e  C: ~/ G

  • $ A8 O9 C8 a/ E( P
  • 5 f3 z4 T2 V1 U" d1 N. k- w
  •   x! N& z) o  ?

  • 4 c. g+ [2 {+ D+ ^( G
  • 0 P1 z' ?: }2 z

  • " U% F( H& g+ }0 w: M
  • : H2 T1 [9 o  \; q

  • ! C, K7 I8 C! l2 |+ y2 O; h' P2 h
    - w+ `$ @  y3 H& p4 Z4 g

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