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


    : }- S5 Y+ V9 c3 I" G9 Q1 M

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


  ^/ Q; ]% e2 a7 d! f# E& G$ N% e& c  k& y; K

绘制简单气象数据图


  • , C$ `+ x0 T4 K

  • ( m. E& M) W* I4 t1 \+ y9 _

  • / p& d0 y1 ]6 y, ]' y2 U8 ?$ v# J
  • " b# d. V) G2 c$ U) r% L3 N

  • # E; W; f5 v0 Y8 g# {! B

  • 7 V2 c, ]  L+ F7 z: B5 F$ {

  • 4 W# s3 J7 |$ i; N/ |

  • " w; {0 r6 J1 b, A, ^! v3 k7 e2 ^3 H

  • ( u: s$ b  v' ^) v% V  c9 I% w

  • / R  j/ i# w: u0 q, p/ P: d

  •   M! T' [. G$ k5 ~& S. I) ]! x
  • " b" p, k: n4 N7 x+ K% H( E3 q

  • 8 G: R8 b6 y9 Q, }: {: A+ G

  • ' B3 {6 I; w* j+ Z4 ?6 U
    " M& w! {5 T  C& ?+ F8 D) S

######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("画布")
0 w8 a% I; B& v. M' L- l" t& v+ Q

3222ca850649b6f730a155691403ec39.png

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

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

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


0 {) I$ o, G9 \                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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

  • 0 o, X( C' i* g) {2 E

  • $ G. v1 `' \' x: ~2 R2 c4 R- b
  •   V! ~7 t- l+ j( Z# r: w( L: x
  • , q: Z; w6 |; \$ x% p* d

  •   u9 L; q* F+ K# d5 _! O7 k

  • 6 V. d  D& J1 b6 g4 h
  • # m& J! V  }. L, ^2 t, G! g* `
  • : W1 t& q* u# v# m" D  C; u7 j

  • ! y6 D; T1 D( c% a, c. v
  •   A1 ^$ B! f' A" p; e
  • & E) D: @& l9 g1 D4 Y! }; K

  • 3 q: Q+ T+ q% m5 {% ?) C9 C- Y$ G

  • / c( ?. ^; H2 B8 ?
  • " {: L7 F$ p" F4 b

  • 4 S1 q9 F0 q) N6 e
  • 6 L  p/ w7 x  P2 ]! t# n2 ~' t& L
  • 4 _4 `6 `) D" ]2 B0 O$ L. f

  • " B" s: ~; A" @0 @+ K
  • 4 Y3 c* ^7 S0 u  H: n' Q( ?

  • 3 @/ E* T* g+ [# i& i* P/ K
  • " D; t4 j  N5 a3 f- \2 q

  • 1 q& T2 z  T- [  z% F$ Z1 P
  • - B: b2 e6 u6 k" Z) u: t' }9 S
    - \1 d% e0 S) ?5 {7 d2 ^

######引入库包############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) ~& l- A+ \' d; ^" E: _


8 F; F1 M/ A( f3 U6 G: w


$ J6 ?5 M3 l) [) J- G/ f                               
登录/注册后可看大图

1 U( h7 e7 Z( A# ~2 q1 ?; s1 I

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • ; `5 o& \, ^3 t
  • " W' q8 V1 a1 B# i
  • + ?' J5 j2 |+ ~8 D+ ~

  •   e4 F3 u1 l2 V; o+ E6 T

  • + h; z. u$ t5 D

  • $ q) Z( P, {- P7 `. A/ [
  • + y+ p4 w) l4 ?4 z+ h$ |5 z

  • - W9 R; F! b5 K0 F# p! [, m- r+ X
  • * S9 p/ p7 K1 l) d6 Q1 g1 [: g$ W
  • ( d9 z; @' C9 P1 Y! b
  • ) F$ l1 ~) ^+ b, t

  • $ q# [( Q) M4 X# f" d1 Z0 J7 R. m5 h

  • : p5 c% [, b( u, C# h" s- @0 ~* |
  • 2 P  [! P4 i# G4 g

  • 4 u( T1 @$ b( R/ Q
  • ) e7 C) ]' u3 n: s9 C

  • ) C) }3 @1 L  ^5 n" A& H
  • . i% H2 P& X& H5 f
  • ) \5 U  i) x2 b4 q2 M4 ?& Q
  • ! W& @: V9 X/ |3 p: _' a

  • ! I0 a" O$ s3 ~) ?2 k+ |  C, e& H
  • 3 o& n1 i0 i+ |/ B0 ^: O) ]

    2 N5 b7 U. }0 q# A$ S$ c/ R

######引入库包############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()
/ D6 t+ V* q; E! ?6 @/ b" n


7 e% i; O, K$ R. j; G9 u4 {5 d6 z


/ d8 \( @3 \) v4 }# P; }8 o" D                               
登录/注册后可看大图


- G: `4 f6 e  k$ ?5 O+ c, T

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

9d9110a408fbe81329b7cfec01cfda76.png

  • 3 J1 D# Y  ^" j' K
  • ' s3 U& s& h" Q4 L4 f# F
  • 4 }4 _9 I7 W4 i! L( M1 n. M
  • " n: g( n4 W" X/ [: p

  • 0 v! [* V: Z5 [$ t6 s6 G6 E: s; h

  • 7 D6 E0 s; v/ {1 z. {

  • # U' d7 J% U; c2 [
  • 6 Y. q% M1 L& ?2 j5 ]. t
  • 5 X9 b: \5 ?( Z; V

  • & K1 J' A' e- y) G0 X
  • + w' Q% Y5 L/ O% R+ T8 O
  • + Q- g5 R2 r  w* ?( E4 d

  • ) S6 j! W* i* I5 T* }# d4 ^

  • - l5 I, U/ g$ o+ h

  • 9 f2 a1 m* C5 D  c3 E, G0 d

  • , ?6 E  U3 x$ X" X# s# `2 ^0 K& @

  • * R& N/ M& u2 M* Z0 Z2 \6 K

  • 6 |: X) B* B9 _( M' G  ?
  • ) I& E+ @4 Y% [) ^: A( j
  •   t3 v% H( W6 }% f& ^& |
  • % L) u4 d1 s! ]6 w4 i( @4 A

    : X2 N; L( B! V+ [, O% ]

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