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


    ! i. L6 N8 [0 o: A) L

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

3 v2 w8 }! z" f4 E" |' g7 k' O0 N
+ H9 q) ~) {; C' @& g' q

绘制简单气象数据图

  • 9 w+ }" `( P; E( \7 q% z- f- J( f

  • 7 m8 H4 ~/ c/ }, S0 P& M

  • " i# ]  q( t) V, L
  • 3 I8 Y- T) g8 W- I+ q- W
  • 8 E& O" y3 G! I% m, h" q
  • 8 V" m; Y% e9 ~

  • 4 h7 A* Q9 [- T: i2 a+ d
  • $ I; R2 @( G, u6 w* l7 R
  • $ M! k8 ^) C$ K! Z) i& e
  • / @0 v3 W6 @# {! A& o" h$ w# K: M. z
  • 4 @' q2 r  s7 E% g) d! E! y

  • 5 M2 J; x/ R& W% g* _
  • " Q$ _+ K6 s# Y

  • # z% G% {3 _; g' q1 @# G: t+ P; M. \$ b+ x" P; l" x: d' s& D/ O

######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("画布")1 d4 S, }. \/ P6 Q; Z8 ~( I) y) f

3222ca850649b6f730a155691403ec39.png

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

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

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


5 [4 x; u" c9 @& o9 ~' Z                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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


  • 3 t; Y) e! N& G, ~  }  H
  • , N2 k3 V8 N) A5 d- D

  • ! Y" J: |& f7 G1 M- N7 K
  • 8 R( }/ i9 X5 K" E+ H+ e
  • ; v/ P( x, k. d/ E8 p9 @

  •   x' z, C8 G- W  W  j2 J5 ~5 C. g

  • 7 w6 s! j& w! w- z/ r

  • * t8 y0 i0 d( l, V3 E% B

  • : |' ^4 N) ^8 [5 d
  • 2 i& e3 U& I* y3 [1 E/ i

  • * V- g- ^4 f" x/ _/ [6 U
  • % ?- x6 ?; z$ m: A% |0 n

  • 5 c0 d+ |' Q- H

  • ; u/ e# i# G/ c4 m7 A4 t
  • ( K0 `) O  J4 _9 u; D+ U

  • 5 Z% a2 U( y% d( p& x
  • : n! `" V8 u# Q" v
  • 1 b) i1 [8 y1 D1 h7 b9 m

  • ! J* y" ^" _5 r) C6 t$ u% X* m- W
  •   W3 F! {/ y4 N/ k2 h

  • 7 w# R: q- P" G$ n% @1 C4 g
  • / `; F0 ~$ t/ O- K5 j" H

  • " Y8 [3 A6 K& y$ B' s
    , z+ D9 |* X; c, c, n/ l! b. S

######引入库包############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()2 K8 X7 ]( i/ \& k; l  p) R% D

$ p0 C5 e7 f* k- g3 c

+ X; `" M# C9 y' |5 p1 y2 T
                               
登录/注册后可看大图

5 M, [- J9 N3 t

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png


  • 7 O) o  t( w$ R; f1 S: A5 X" M

  • - }( s3 R( z8 N! N/ o0 _, p

  • * Y( m6 x" W2 P) t5 O

  • - K& T3 U& L2 D5 w  X" J* d
  • 1 ?; i5 p) [5 p( I$ p

  •   T( \5 K2 Q( u
  • 9 O) ^" f7 y1 S& t

  • ; O1 M$ \" _6 W

  • ! l4 H9 b, U: X9 }1 f1 t
  • ; v) ^2 r; `" L* J
  • : k: x: v( K- s. [3 r

  • 7 J+ [0 O7 S4 x# h, K7 _" O( d' X( `% E

  • . E( j0 m. @$ D5 U( _

  • , l" @9 Z0 m  x) M
  • : I% H- o5 h3 `) z' u0 H" s) D  e

  • ' D6 W, I' v4 }
  • ! D/ D# ?, y& W

  • & D0 w: R3 G8 W1 Z
  • $ d. B; j& ^$ e8 ?) N4 R3 {' e
  • " v6 |0 M2 g8 w, x- J5 {

  • 2 K5 B3 a  J* a7 n! j% Z5 r
  • 5 x2 C0 G+ K  R6 [- o
    ! s1 D! V2 F0 F& g

######引入库包############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()
6 J) R" j3 C5 y: }' p0 W

- j. ?( ?8 T; [/ E. a

  O# m* o. l) G# ^8 M; o
                               
登录/注册后可看大图

( D- V" \/ R# @

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

9d9110a408fbe81329b7cfec01cfda76.png

  • 4 N6 v0 `. Y" X; l

  • * c; H/ E2 F& ~7 A
  • ' T* z1 U1 Z+ g& B  G3 G
  • $ e3 e$ Y" ^6 H1 f, }

  • 2 g8 s! G( Q% e8 ]$ |1 z
  • 1 j; x6 J2 H4 n0 Q8 @2 s
  • 9 I; f' v8 W% ~9 {) s
  • 3 O1 w9 r) {* u& u
  •   y% j) Z8 D) C1 r5 a! ?

  • " Y5 f9 o/ {1 I1 m. w8 D

  • # d1 F: J, g) l

  • % {# U" w! n8 L+ c6 {
  • ! N2 j3 l+ g: X' s

  • 8 G+ F9 |/ D/ B4 L8 C* C  ?

  • " L* _) D6 f& H& b3 g

  • $ ^: ^* P4 z) E- D# Z* g6 b
  • 4 D  N1 P$ q, S' U0 I
  • ! M( f+ `5 H# }( ?  ~( N' g# Y
  • , d- G- d# D2 u; X4 G( `
  • * x3 `  o3 L$ g. n1 c( g
  • ; R9 @/ i  L$ o6 ?

    4 n. f0 I+ m. O9 x2 v

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