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


    : X% d4 I7 K% z; F- v

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


/ w# h- k' E1 H  b& j+ l$ @' x1 t5 C

绘制简单气象数据图


  • 5 E$ P- ?/ x3 h7 v* X' M

  • - }9 g  D& E0 k, H

  • 4 j; g2 ]; l2 ^. E$ G9 J  X
  • / @+ T1 B, g5 f5 s% v

  • " ~  X6 v! K9 @
  • * \9 j' o- U+ r# k
  • 2 f3 n, }$ }' t( O  @

  • ! L  w* Y5 n0 b- `* ]3 r! {
  • % o9 r) N8 w. E6 K  }/ L

  • , I+ O5 q; ^2 c

  • 3 j0 K& e0 `. N4 u

  • 2 d5 \0 y6 d! `
  • , v, v/ y, G/ ]2 n: i' E; Y7 \

  • ' `3 s& \( L9 O/ v) a9 k: g6 d1 R: m( V, P* \

######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 q9 P2 G! O8 Q& S% x

3222ca850649b6f730a155691403ec39.png

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

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

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


2 K% g/ L/ b! {" j8 D6 B7 U                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • 1 K. q# V0 F: Z9 f+ e9 R
  • - F0 C7 d! w1 q

  • 5 h" S' u! R6 Z4 V

  • * L' R$ D% K1 x. o$ z" M

  • & r5 q& w- G3 `) _1 N# `2 b7 e( U
  • : z' f' M( B6 u- @2 i  Q4 @7 q

  • # ]$ O# `2 @. J5 {0 r/ q) B7 n
  • , q7 ?6 N+ H& D7 P
  • : ~! |( o& K% \
  • 7 V& H4 x! p( ]% X6 Z: @
  • " C4 f  S# y' T8 y
  • - l$ J/ i2 [: [* g/ B( ^% @  S6 S- w  L

  • ' f3 Y7 F8 k2 C5 b6 f
  • # j- K9 \$ A) M: Z

  • 8 t. P" m* W! I7 J6 {+ q" b) h+ W
  • / J$ w1 @% i# Y' J3 U: ?
  • # D: y: V6 p. D8 e2 ^% K
  • * n5 H) I% ^9 \3 k: }$ ^

  • % ]' \* {$ s: j5 z

  • $ F% K+ _5 B$ v# B* w
  • 2 u. f) I' c" z1 U$ {. M
  • ' \) d) X) `6 X
  • 4 i- U) C+ p5 N
    1 C4 a; v2 }+ h" C& \1 k

######引入库包############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()0 m# c+ m8 z9 M- H: Z! \


% x* a) g4 t. ^# {

% \/ a7 V6 r, k0 C' M
                               
登录/注册后可看大图


- J, _8 S" M  G  t+ W1 \+ g: R

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • 3 n# E  F2 c% `$ U7 E0 S4 \
  • ! Z* [6 I- ]! J, P6 n! O, [

  • $ e: [- `2 L* q0 C0 f: g% }9 z) U

  • & G, K9 E) a& M# p4 R2 r
  • 5 L# m3 Y$ y4 f9 Q. @3 {' v8 b
  • 1 C2 Z) V' ^# Z- Y9 Q

  • 2 p3 @) D! Y( F9 j' C% J% V$ B
  • ) p/ y+ r! o, s

  • 5 i  j' g: ~' s9 [) G& \
  • % o' O' y/ a' E; C- }  `  y

  • % ?6 i3 D$ R( g7 r+ U# `
  •   l  Z% ^# l2 j+ F' S4 e6 u; b

  • 4 U) }( ]6 T5 `) i8 K

  • 9 k1 d6 G' Y$ i2 i- @1 Q) N
  • ( i2 y. o& z7 T9 p/ ]% @( g# N

  • 2 w- w/ M' J2 Y: x; z/ J
  • 8 N& b$ ~8 ~# @$ P/ T7 j  o
  • & n+ s9 \! ?1 n* v

  • . G$ ^* p6 W2 @6 d5 Z& x

  • 6 A' }$ r* L! o4 p# C, P
  • # d# u' \0 q, c5 w# I3 i
  • 5 ^& j* G, M! C. M; F% |9 v
    # u2 n" d( \0 O1 O* o' k& |

######引入库包############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()
- a# ]- i% \2 s


7 _, P- W! n8 U; j$ X( s! ?: O

  j0 ^) a1 e' h, X; A5 _
                               
登录/注册后可看大图


2 u& E  m; [. h

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

9d9110a408fbe81329b7cfec01cfda76.png


  • * y1 z! q) \; c. u3 a+ b
  • 0 i( P9 H' o* h, P1 R6 J

  • 4 b4 x) ]& Y) O* H& g: Y' N* s" D( r

  • 1 @# V5 @: E! d/ [% C9 ~9 i' F

  • " X  c. i1 J# L  ]6 E

  • ( L+ F. c4 @3 ?) l/ d5 X" Z3 h) A

  • . a6 T5 y5 W; b- B. J6 k2 X
  • ! \' [+ R3 W0 s5 P
  • 9 H6 o5 @# f# X  ~, B4 t
  • + a2 [, Q; d: k) N  c
  • 0 ?3 Y( }0 W$ f& g6 I

  • * _% s" D" K- H4 t* v

  • 4 W) Y" ^& _& z8 Q# e0 ^, h

  • , P: F: j( }( _- j

  • " B& E' T+ h9 ]" w$ l9 R' b9 _5 Q- d
  • / R6 o* z3 Q* ]% K+ w! {( E4 }4 v

  • 5 {) X* P: w1 b" ?6 ]

  • / A% l+ e* j  l8 I8 F' B( Y  p

  • 5 ?. c+ u' @8 b1 O! [

  • . p+ P/ {8 r" U! V" Z* m1 D8 q
  • 9 D6 `% D* h; e! H; S3 m3 I4 c. |* r

    , E6 o4 Z# l) T8 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
快速回复 返回顶部 返回列表