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

    * }" b9 i0 \. m5 \1 P

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

- o5 c2 C' G& Q9 v0 t# f& m6 P
2 r) m+ I( w5 t# p1 Y

绘制简单气象数据图


  • - I% m+ ?! W# h8 B" E
  • 9 T6 v) k5 L7 Q, W

  • 6 ^; H6 X- Y1 A5 d9 e

  • $ O3 M( N) W+ p6 O0 N/ V: M

  • 0 I( G' Q% g- `) S9 |

  • 0 g1 H0 E" g; m8 H3 k- U3 L6 u2 k  I/ ?- V
  • 1 @: d% Y) H4 e
  • 5 Q  G8 j5 `" d- F

  • 8 O3 ~+ a4 d, Y% E* p# [

  • 0 {; e0 v( ?( M8 c0 X" B) m* O0 `
  • 7 D3 X; w) T6 ?& {- ?' u" ]8 L  P

  • 8 ?7 d' L9 J% r5 C- {5 Y$ I) |! c

  • : L$ r, q. n% o3 s: y/ i9 H
  • 2 D1 h- L# J. A% `3 c8 v
    7 H/ e% j8 a* i# R0 f

######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("画布")
$ k  ^5 @( j0 c" [7 l# C! O

3222ca850649b6f730a155691403ec39.png

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

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

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

/ A5 H1 I* ]' l2 E# k
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • 3 h: p) e- ]8 `% S& K6 n

  • 2 P9 D: \$ v  i8 k- N

  • 7 ]* r+ V6 K) j" G
  • ; U, J$ ~) p- t+ b: I
  • - I: V/ p8 ]" h
  • & H5 }0 e9 ]. K2 L+ ~9 t
  • & q( }- `5 L$ f( O2 ^. _: k; d, o

  • 5 K: x0 k" |5 y( e2 E
  • & m% R  i+ V# `8 I

  • 9 j0 m4 t8 j. v6 B; U/ }

  • : [. A$ w+ [8 w( ?2 d

  • $ z% M  Z2 p. n) R; ^
  • , U* y1 S& s! o$ {! E
  • & w+ E+ K1 g& F1 H) r. O" Z9 c

  • $ ?- z) c" Z2 r: ]' K" `
  • $ z8 k: T( U3 c0 C- A

  • 7 B4 Z- ?+ U/ X) t* e6 Q3 e
  • 4 e2 Z1 O% W7 f( R7 h7 T5 t3 x' p

  • ! r4 l; \5 F  O4 E; Q

  • 5 c; E! q' y& d7 q' Y# a: p' ?
  • 8 |+ w8 b% j% S( I

  • 5 i) X$ ~4 B( o+ {% k, K' k9 ]$ e
  •   t8 s1 i" n, u5 X* I5 s' W/ ^& m3 _

    3 M* W4 {9 r3 e" W9 L4 c% Z5 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, 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()6 U! |7 a5 |. H! H


: |1 i' a* T5 S' ?. Q6 G

, [# \0 H' N3 f: `& J
                               
登录/注册后可看大图

3 Q1 c2 C/ q4 s" N8 C

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • ; G) g* g/ s+ z# i1 r9 X1 v
  • - C/ A3 h8 p- p
  •   B& Z' u5 M% X' K5 N3 ]0 e

  • & T  R( m+ W: I( Y
  • ( U1 j. T6 i8 J# g8 m: ^
  • 9 \- M% b8 N0 F6 m
  • 0 D4 i4 V) Q7 l/ r" Q, D

  • $ y$ F" m' G# f9 O- A3 S; D

  • " N* F! W4 Y1 t- D
  • 5 {. n3 w3 L- [3 P9 `+ \; f  o- {% o0 i
  • - D5 S# \$ `2 R9 O9 y/ L
  • ! D) \+ e/ e' G! K

  • 4 Z: v; H/ Y. X8 I1 |- X

  • ' t+ a# z+ I4 {  R
  • : A7 V7 J- ^0 s
  • ' l) t9 A) S% ^6 v' ^, q. T- x
  • 7 a! P6 ^- w$ s* k& }# S/ [

  • - j* ?# J: N8 V% H' D7 M. F

  • 2 c6 P" \8 Y1 F- Q- p8 c; t

  • 6 {( a& `8 F' z2 o' n6 C

  • 8 K, U0 `2 Q1 O0 ~. f8 d+ ?* h
  • 5 l6 M1 v9 F) h! b5 ~. Q- A
    9 S$ A$ A% d2 T$ B+ `( 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(), |8 Y. c/ L6 ~% d- s


/ o) }- v. h6 g! @2 l0 t* D9 C* l9 q


* A" T$ d% A$ G* P% @/ m                               
登录/注册后可看大图

3 s8 E' `4 f' z* }

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

9d9110a408fbe81329b7cfec01cfda76.png


  • , p5 n( i1 h1 J

  • : U8 b, Y8 v; W5 P: c2 @5 r
  •   z" o! h& ^9 L3 a
  • ( @: C+ K' A4 e/ j5 N, y
  • " `+ s3 ~  W$ d0 U. Q* G
  • 5 w' @, t$ i7 Z

  • 9 b$ i9 v6 W5 D) \- |

  • ; w5 E3 S2 H6 `" X1 w

  • * J, L4 Y/ c/ N' J5 @# T( q# ^
  • 9 b! D+ f, H' R. O/ R  z& |
  • : N5 P9 G2 T' a6 L- q

  • 4 h: @4 Q/ T: Y. [9 K; Y- z

  • + C; g) e' B9 w: Q  y$ ~
  • & J8 ^) t( p/ I  V8 X
  • 1 @, E* b5 ?& X8 B0 z+ S* L

  • " O7 n# x' g8 n
  • 1 s0 Z& J3 i! F* T
  • 5 p! S5 ]  B5 A" `2 R

  • & H( E+ s7 j2 e$ k7 r
  • 1 q' ?; f- k( z( [- M) J7 p# V# ?
  • ' H  Z# d* w9 v# E6 h1 c9 T" b
    . A5 {1 M8 ~, G( v  Q' |5 e6 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
快速回复 返回顶部 返回列表