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


    ; w. v2 V2 S; o8 ?7 p

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

; G# ?9 `0 ]+ O/ E; A$ @

8 H: S: z; e. m5 [# v

绘制简单气象数据图


  • + V5 k( q6 s9 T3 h6 [, ^5 N
  • , m, X$ O% J/ B9 [
  • 5 Z! D! l- L* p! ^' l
  • / o" D% n8 ^) G$ m7 O

  • 8 K7 q. N- o7 q; F4 }8 ^; B
  • 5 P/ v# l6 g! T3 q4 `8 T
  • 1 j8 e* v% ?+ p
  • 2 C3 R# H2 }$ q1 u( B  i! y+ _
  • $ G* B/ _( p. L

  • 2 S7 X' w8 d, N3 s* D

  • ; X8 \8 H9 O' d& s

  • # Q! F5 y6 h9 p7 C  {0 D

  • ; Z% b1 Y3 t8 h; Q8 W

  • # n% c$ Y' ~$ H8 `" r7 f/ z+ @9 ^  v$ A" h, R5 x# D1 q3 w

######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("画布")
. }8 `' i2 z; d% p) `1 N  h

3222ca850649b6f730a155691403ec39.png

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

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

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

+ E7 `- C* b# }4 u* @7 C# N* \
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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

  • : o% J' A( o. u

  • ' G- [% a7 ^2 e6 i! n
  • ! T$ T1 Q. [( d8 k
  • ) |& k6 m9 H5 y% I% f' K1 }& w
  • 8 A0 k' o/ D" l+ o, k. y  S
  • ! b2 ^: {( O" J* [

  • 4 M' f0 v2 A4 ]6 k6 c
  • - d" G7 f  d7 c5 ?7 {0 |; Y

  • ' i" l8 Z% b  J) V' [9 H* W
  • " {- Q) K' ]8 ?& U/ P, S/ E
  • / o/ s( D' [7 K7 L6 S+ i% w9 q( I
  • - y- b8 C! o2 N3 S% ?+ [. P* ]

  • # Y  W) f& z! G3 C) d: N0 i7 H
  • 8 f" ^  O% E' ~2 u( k& n

  • 8 t0 b9 A( @3 K2 _1 X8 Z

  • 2 e& R& ^8 O: A5 ^, ~- e- a3 A

  •   n' x1 I; z0 f* r( G+ B8 ?

  • ( u8 E6 \2 n: C

  • - I  c4 ~3 a+ j  g* S
  • ! a# Q: v9 D8 g" a6 M
  • 7 E! c* w3 A& b' c
  • ' E0 }+ K8 X5 Q1 W

  • ; j3 K* O) h3 z3 o( l* Q# p6 y6 E: A4 S. P2 D

######引入库包############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(), X$ ^/ A6 W' @) \% b  w& B


  @" n# Z- ?  S6 N% ?

  X, |* ~0 }" D8 L
                               
登录/注册后可看大图

/ K, J" T# I8 D0 e, \- ~$ q

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • 7 Z$ {2 q, O2 G& N4 {
  • ; t9 Y2 N" X6 ~6 F" W1 z$ ^6 f5 g
  • $ F: M7 G# U0 I
  • / O; i( a/ m6 p9 o( o8 G

  • : _7 M1 x( n$ z5 D' W
  • ) Q: N/ f. e: w8 t. ~9 {$ W1 I) a
  • , C6 W8 z% W9 C! @
  • ' p0 ~6 o* `  }: _, F

  • . z3 ^/ _9 b# K7 a7 \6 G

  • 6 D! ]  S, ?/ x$ Y& U2 O, i
  • 2 p+ ]; J+ `7 C& S1 ?2 M

  • 5 R" X2 e0 s4 l6 o

  • + y0 s4 J0 W+ a7 D
  • 7 L8 @. b  a, ?" V

  • : H3 y& P& N( w4 K; d. D2 x1 m3 ~

  • 7 v5 J# C9 S, [

  •   A( f* [5 }5 _( v+ ?( C
  • - K& T  r$ O, i& p

  • # i: U. f" K8 H5 |! u

  • 0 a! M, |6 i* v$ ]2 ?
  • 3 w# W& w" r9 C( i2 y: k# X

  • 7 Q" X3 n; D# g2 m! F
    - c; p5 P, S- {* A) V7 s

######引入库包############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()2 X& T' h% D  [; K  }3 E


/ x: |0 g; |' ^5 u: R& Z# j


: `* ~( i6 ]0 F  y4 D/ m3 Y9 C, B                               
登录/注册后可看大图


1 L" q! ~# C% G* w5 S3 j& G

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

9d9110a408fbe81329b7cfec01cfda76.png

  • 6 r2 F$ U4 ?4 i; }% z

  • . P; j- Z: n. C) W$ n  ]4 q# p
  • / O! d6 Q/ ^- B5 u2 ~$ ?
  • . g, ~( z6 x$ F

  • # A! s8 L& U, U9 M3 S1 e

  • # y5 Y* k# q, U  R7 V9 D  u
  • ! X0 r6 }. W" t! P2 @2 Q& I

  • * C: c8 B# ^3 m7 ^$ V4 O* Q
  • ; `. P. _$ {, O4 {9 ~
  • ) Z* \, z' a# a2 E$ X/ h* i

  • 7 h" Z, N9 H( K( D/ `/ _
  • 2 _, S0 i; r& _3 {9 z

  • 1 U: P: j6 Q3 u5 k
  • ! L5 L9 ]0 ^6 F- m. j/ `- [
  • ) r2 T8 O/ F( a/ W5 }! W

  • . ^& b3 u8 n' F* X. T, G
  • 8 R; s8 b. `( ~) Y% M$ @* t& d

  • ' z8 p5 L$ V5 A9 i* H# g
  • , L4 p, k5 r' V* m% T: V
  • / M* d) v# ~  Y7 D) F0 E2 C
  • 4 Z! p! Y8 ?$ @# @1 `

    ! G  R) R9 h; J% I* D

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