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

    : F$ e! V/ M' U0 [  ^6 A" d

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


' R" g3 a. k8 `; u& O1 }  d' ^+ {0 r' E1 m8 o

绘制简单气象数据图


  • 0 N( C) A  q; M8 f4 F2 s, N
  • 6 m8 F9 C' f! O# x

  • 4 Q. O- Z1 Z: p, U

  • ! L" m5 V2 u4 C/ v. e
  • : N) `7 B# s" @6 u' a0 A( e
  • 1 e' i8 |( j' F* \$ K: f
  • 8 P; _/ x9 f# @# o2 B
  • 5 i7 f" n% y! I: r3 w

  • % W. e3 x  n0 T

  • % g& o* K1 q6 P) Y+ i
  • ' c* a2 L7 o$ p  Y

  • 0 A' s4 T) L1 q( I9 S  N  K* X

  • & N: W3 R( Q' X1 ]' b" [* u

  • / b" ?& P5 ]7 q8 b3 F) h/ F2 [8 l, F0 ]0 t- ?- _5 b

######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("画布")
% W; D" y1 k& S2 O5 K; z* E4 D$ [

3222ca850649b6f730a155691403ec39.png

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

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

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

- r; f  ?7 q0 l. o: I/ a# b
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • 7 R! H7 h5 c- n; y& L, ^
  • - L8 _1 ], j4 w8 l1 Q* d0 [, Y0 R& ^

  • " p2 d2 @; Q/ A% P
  • 8 o7 p8 D$ ~( ]4 z+ q% S

  • " j! p( p$ V( j2 D

  • % M+ P' _6 ?, K& T" k% `0 _

  • # `  l0 c( R# ?* S5 U0 G
  •   [0 n3 ^3 z9 r

  • ! o% s( W" u3 t( H- ^

  • 5 t/ S/ [1 H9 z; [' n1 O" K

  •   f5 n, B- ^* G3 q  ~$ m+ C6 M% u6 x
  •   L3 U, E) Y$ c" [" T
  • ( g& b4 x9 w2 o9 K& b) T2 x
  • ! x4 x5 y. l6 q) h$ W

  • 8 c8 \% ?1 ]+ c. p9 I

  •   s6 D/ `% t1 w7 ~. v

  • $ w! J6 _! F; z% C

  • ; ~7 U: \% A! ]1 ^
  • 0 v0 X/ [6 h! G1 p7 m

  • , Z1 l" D1 l/ e, F2 p0 Q9 X% n/ A
  • , s; F2 P# |  P+ ?

  • - G: y1 m3 i" ~6 s- l. e

  •   i8 p/ g% m  V" g/ @- F. c. Y, V$ k9 W, R* T0 M: Y( I

######引入库包############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()
( u( j; U- A) l/ |  j, B0 b" a

; @6 m9 j/ }% `5 j5 T9 H% x

  Q) J. z; e3 C0 \. M+ X
                               
登录/注册后可看大图


- R; D" b/ N; b3 }1 G

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • * O# {. A$ q) J1 ~" |2 I( ~6 ^/ z

  • 8 r$ H8 w/ [( v  C( |; m' b
  • 2 w3 i7 Q* f% A! \" |3 V& j9 h

  • ; m* x4 }. m; y6 L; a! L4 R% y
  • 5 N! ~1 O. h$ o7 U; \# d

  • " Q. L! j; v: h) H+ R0 X5 @
  • ' `. C" p; M" j/ F
  • . m1 i" f9 J6 n: K( U" q

  • + D2 y. K( d/ r& _+ Q: |; L$ g6 g

  • ! w' f3 I  |9 i4 M3 O& B
  • 0 h$ }4 z( \* T$ c4 A6 D0 N% L

  • 9 }; N0 Q/ G9 G# v
  • , r) ^% ?! `' R. X9 Y7 V

  • , Z( J- T3 C3 z* Y0 C. W7 t
  • 2 N# R( v1 u) B% ^) S$ D
  • - c2 \: @) r7 n: _# _& \$ C) H
  • ' c$ s) Q$ G, e) ?% {. {( _& e

  • ) Q$ y- J7 D7 q. }  Q5 ]. Y& x

  • , d9 v1 U; r& Z$ U
  • 9 M' b* ]5 O2 `# ^& c. |# M8 N9 t
  • * p: L4 R3 C7 k0 p3 ?& x9 t
  • 5 y( v( w0 Y) c+ ?9 G. f0 P
    . _- n9 }* X- M: W# k' 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()
1 V8 I9 J5 o* h

2 p$ O% V3 c; G( o- l

$ `6 v0 o. G. X
                               
登录/注册后可看大图


# q+ ]( z$ W& b) H/ f4 p6 G. u2 G

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

9d9110a408fbe81329b7cfec01cfda76.png


  • 3 I. A9 q3 m  E4 F

  • 8 W' C7 Z: |# n

  • $ Q. |* b/ h( @5 }$ h
  • 5 i3 F5 l5 k' y

  • 0 t) y# K, l& T# d7 {7 K4 ~3 ^
  • ) p! u) G7 w6 u

  • " ^* @: }/ x" J4 B8 C' c  r

  • ' U: P. s( r+ x- M- k4 i
  • 8 d6 N4 j7 I( D1 y
  • : G/ y; E7 _( h& f
  •   S9 L/ F1 Z# Z! Y& e: x/ ^

  • , V, U7 o; Y+ @5 `5 M/ i+ _& `+ B

  • . k- T5 [; q  ]! v
  • , n( g, \3 C/ t
  • + d$ y" G. ^/ m
  • " q& t' P0 H" f1 ~9 Q7 D4 c. N
  • - ^2 {$ D& Y: _
  • + f2 S; Q% v: h
  •   H' Q' {1 D, k' p

  • * }% m7 V; c7 t$ o+ x' ^( @
  • 1 v. p' z6 z  \
      X! e. q7 x9 w5 Z

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