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

    + H, M# O7 S8 U4 Z. M% C

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


" C) Q+ ~* F' q" `% p/ {% g( ?1 d& Z0 E% d: x6 i$ d

绘制简单气象数据图

  • 4 X2 ^1 @/ Z" P$ U8 y! B# ^6 w
  • & q: s; }0 \: v

  • & k' X% i% A, H  t- _3 v8 h; B1 R

  • " B& _0 L% S9 s2 F4 i6 I

  • ; q9 \9 F8 u2 ]! L  N6 L

  • - Z: A7 O- E1 y# A* T. K

  • . ]- g) d2 o0 ^
  • 9 x4 o+ M) V; e! ~

  • - _3 P' p5 T. Q9 q3 ^  p, i( R
  • " o5 F0 I0 Z0 d: L& ?- [
  • / T2 o0 x: T/ x) n! Z8 M
  • $ r; |8 r- {/ Z

  • : u$ n* E- y# t/ A: T6 L

  • ( m( F5 C4 w$ h! y5 w4 |6 }" ~& @  r, a5 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("画布")& r: Y% O7 Z. V& ~3 c

3222ca850649b6f730a155691403ec39.png

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

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

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


# U* ~4 z: d: o* u1 M/ h                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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

  • $ q4 {% w' P( t9 `' w8 w

  • # W5 \1 s9 [2 ?. t# {) W9 h
  • 1 u7 C# d% C7 X& @

  • - J* v% K5 I% ~
  •   @( v- _# e( _  V7 Q
  • ( {) O. U: s3 l

  • - @& k3 X+ D, l

  • % n! y  \% A# R; n" z4 L1 k2 Y

  • / J$ E  N* ]9 H1 ?
  • 4 l' n6 _9 S, G

  • & e+ |: S$ ~* E: {, I4 ^
  • 4 G1 _* ?8 `/ `
  • : l7 ~# w5 P* i( ~( V- ?: g

  • : q, I0 ^' K: L; v6 K

  • , v( ~  g! I( B+ ?/ C5 t! ?$ a
  • ! B7 B3 T: B7 ~; b) m
  • 9 u$ D, w; @& P7 ^# h; n$ j3 b
  • 9 M! h# o. X. P# L4 t9 D% [  h

  • ' C  P) T+ W$ E

  • + x( w1 \8 W' A% b: V6 j. z1 a* m

  • - C: v& E" S& [. k1 t) D0 E2 I

  • " A% u4 z3 z: f. W) y$ R# ?! I( c
  • * n! T" ]+ X( k6 g

      i" H5 s+ E$ [  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, 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()
, G8 p4 b, h! p% w6 W  P# {

) b, ?: J: ], [

) |  B6 {$ t2 B$ ]/ U
                               
登录/注册后可看大图


! z- i3 D9 g, t7 e( m% n

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • 5 s9 X" h  X' F4 h* p* J' U

  • / V3 }8 N0 u& X
  • & c: U) C& M, S8 ~

  • 1 A8 o: r& e  z1 b& o% l, l* T1 d

  • ) y* F0 g! C( {

  • 3 E& b# k- C! p5 w- F$ M
  • ' n3 l6 E: K9 c' ]( l
  • : p$ x  A3 t  h, p8 H( R
  •   o6 I3 H( Y6 \2 ~5 X# V* ~
  •   C; r( D# `* k, U( K
  • % U$ H+ t# a) ]( o0 T
  • 3 p1 [8 ]* |* J! B+ B9 B
  • 0 h! x8 f) y# l3 h3 I' q4 }2 A' O$ D
  • ! R2 Y0 h, a; R8 c* L8 H

  • 5 f$ I" x9 K3 J8 v4 P

  • - K0 Z+ _" O: i. {5 b3 _
  • : R/ `( Q6 S$ o. K% k7 p

  • & I  P2 @5 X( ?- s/ T/ j2 n/ |
  • ) n! @: u: S4 ]' O

  • 7 F7 U4 U5 I& Y) S5 C5 B2 O

  •   E% h- G/ A+ j6 `

  • - z1 Q: r* ^) q; r; k) L
    " U3 x. `& v0 U

######引入库包############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()
5 [+ }$ v2 [3 E) y2 t

! V4 W: h8 r  I7 i/ q6 k

$ D  |, a5 B/ `2 [! G: p
                               
登录/注册后可看大图

8 c: `& j/ |+ g/ ^4 |

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

9d9110a408fbe81329b7cfec01cfda76.png


  • & ~6 S# T# f7 _, G

  • ! o3 B* p) q+ r+ G; r$ j
  • ! U$ b( J: I4 O  G

  • 9 O. s. c* I1 e! v4 g# A
  • 2 g# \7 x6 \. M

  • 7 I0 {: F* p6 Y1 v; n
  • 9 I: W* n* ^7 ?( X( P$ a/ z, i

  • 6 |% x% D/ J9 ^/ C' A0 K
  • ( p- s6 |- d% K, E" l+ }

  • 4 t# ]( g" j% E

  • 8 w- ?( a2 r/ f2 {4 ?  V
  • ( A: r* k" S- O6 S

  • ) e" X1 Q& A$ j4 U$ C6 y3 |" N

  • ' Y! r. k  J6 L: _4 Z
  • 4 h2 i6 Z' A  ?6 D' m+ E# Z

  • , U9 L5 _4 [  ?* B% N
  • 2 x) _0 A. _( i7 V3 N
  • 5 W7 o& p! E5 F8 G6 o) L
  • 6 ~9 h" T" `" S" R7 R* M, ^
  • , k0 z$ _- G0 s

  • & f) `, H4 R1 G7 u( D3 a) b8 U/ 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 = 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
快速回复 返回顶部 返回列表