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

    % o2 K, K' i1 X8 K

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


% _7 _" B  J5 \
  i* m3 J& s, G, [. \6 n$ p

绘制简单气象数据图

  •   s" I6 ?) m% E! p3 Y- h
  • $ K! J1 y7 P6 |: y8 |  r/ r1 G
  • + F9 r5 l$ i8 w- S9 X* y

  •   h- @. P/ e8 H( A3 P
  • 6 f; t2 H5 l5 u6 G. ^( |
  • 0 O# J; G+ h+ Y5 Z
  • ; T( [4 [' a9 O7 Z1 D

  • 0 z, P8 v' e7 F. f) [+ S7 e( V
  • 2 h0 {$ h5 j" o' t

  • 8 |( f: p8 D$ y3 A. r8 ]# A" z1 O& x( j
  • $ }$ p6 ?1 V# L  L" Q4 i' x4 e$ t

  • - D% y* I1 N9 ^: u  P' ^/ {. Y

  • 5 S0 e& |# b- s# q% [) Z

  • , D8 w5 h2 y, g, {' r) |+ C* F' D% x* J

######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("画布")3 W" l7 l* Y( A. O% M9 \

3222ca850649b6f730a155691403ec39.png

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

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

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


4 V% o" L7 x9 V5 j3 P- G                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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

  • 9 [6 U* |" N# F- c; d) i2 d9 ]
  • ( s) d& g" Y9 K, u$ u$ ~. t& Q

  • & x3 ?! T; z6 b" z% Q( l
  • / k6 C- \' R) c, C, p) f
  • # n* {) C! {0 ~- N/ \% d4 p

  • 4 \  m& S& M# b6 O" a2 m

  • 1 P# J& J6 ?0 P- I2 u
  • # l+ r0 J5 u" e6 c2 I$ b
  • ' [$ n  h$ U2 d# V1 o8 u- k
  • , W8 z+ r1 I, a; q) O/ u$ E
  • ! G. y9 P) e' e( e7 t

  • 1 v( U3 K/ o/ `% |7 g& Q. |) d/ `
  • 2 U5 b" @0 c9 o9 I: k# M" j) H

  • 7 U+ Y8 d5 Z) }  V/ I4 T& f
  • 9 ^( A, O" Y' P" y" c, `, ~1 g, k2 s

  • + J( Y' v6 k1 m) a* c& C2 b) L/ W
  • * }4 a- D6 U) H
  • 6 o: j, K/ c, D
  • $ w  g, D+ x' B7 ]# s' T
  • + ]: v" e; E. N# U8 R

  • % M  ]3 u2 B. C, ?! l" q' ?
  • " q6 G$ R/ y; h& f2 p9 }
  • 1 N6 @+ X: n" ~: D7 R' |

    ! D' y/ i2 T* j; 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, 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()# G; U( G$ V  p* F: }4 p$ K


2 }6 I. |, y) s% ?


8 I& S. C5 x2 Y8 C                               
登录/注册后可看大图

+ i, Z9 t5 k1 H

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • 3 [& c( S, s8 D
  • ; l* e4 A+ K  h; ?$ r
  • - L8 ]! g) L, y0 R+ J$ o
  • 4 n. v0 u, Q' h0 y1 b

  • , H2 a% B1 d, u2 ?/ X5 w8 R& `  d
  • 8 R0 n! m+ U( k& ]6 E! _
  • % z( I' l5 r4 T/ A2 v

  • 2 Q' C: n. x1 A" p$ R6 K
  • 1 q# E- l0 a" B7 v% I# F
  • : @2 \8 v# d) h
  • / C7 P) _& b+ X/ Y' j
  • 9 f9 _! v8 H) A1 P

  • / W" F& R# E, M. ]3 X
  • 2 R* h6 ~4 V& h: G3 `7 O4 X

  • / z+ a& @; c5 e  [. q$ \
  • 9 p. X/ m. T% C$ U
  • ' ~4 Q9 n, n! g; e: e/ \
  • 9 g& G3 h+ t4 {
  • / ]& Y5 a* f- }  ~' d. o

  • 9 S3 ~4 t! [5 I& w, D

  • 3 f1 p2 k$ \! Z

  • ( i8 q/ L3 b6 |# T3 h& U- {) ~
    % a; l  n# ^3 V; x0 O

######引入库包############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()
* g$ L' x$ i- {8 H

9 ^8 ]/ @; }' \

9 E5 h9 q/ d  f2 }9 s: ^6 W; v7 h- m
                               
登录/注册后可看大图


& K0 y# f2 b2 m1 B

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

9d9110a408fbe81329b7cfec01cfda76.png

  • 7 Z1 r8 \6 C% y0 {- f' ?3 d: c' D
  • ! }/ l+ e+ ?  a. R$ U

  • 8 u  n: V3 C  e2 |  K1 N* l: `

  • , p* o3 S! k. M( h  `

  • + |* }0 T% y  N% l

  • # P" H8 R" s  Q. c

  • 7 |" H9 Q% J( w7 r4 S) P
  • " N2 ?" V1 p+ T# }; Q; X

  • " `0 B* E' Q* ^  w

  • 0 k7 x, a. r$ w" S3 i. Q
  • 1 E+ L0 T* w9 i1 H5 x

  • + j- d, n5 c$ i& a, f1 A

  • 5 K6 i* K( \0 r8 J2 j1 W! |
  • 4 o0 J5 S" B6 [) X  N2 Z& p% [' f
  • 0 x; U  Y% U) @# }6 _
  • 1 M" `+ X5 |, g5 s8 ~

  • 0 _7 c6 ?. e( L; e& D

  • , a5 z1 ?% V" D4 v$ M
  • ( u' E6 _0 p0 i! Y% g
  • & d- \3 c* `- d# r2 n' {  e& S- }
  • 9 i8 i& m9 p4 T: l9 Y9 A3 d& ^
    5 n' B& T; O" P, 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 = 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
快速回复 返回顶部 返回列表