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


    & d, a( z+ r4 R1 E& Q$ d, _

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


/ @; u) F& y5 y; n# V, q) ?6 C" u! \6 D# \

绘制简单气象数据图

  • + \" P  d; S" @  X

  • * E/ H: P5 B/ V# p: k! h

  • - K6 N% F7 v6 [
  • 9 @5 S4 z* v: }) J$ q

  • * e3 w- d' _; O0 z' E( ^

  • . @2 s' i. m: ?: E# P

  • , E7 I& ^$ b6 I6 I
  • + t) V3 e. L2 ?$ v4 r8 R

  • 1 x4 |4 x1 y; C

  • " E0 O! {2 h" _3 c3 [6 q
  • . r* Z: z8 O- q2 e( P
  • ( n8 f3 Y7 M7 q" P+ w% C

  • 4 {& n0 V1 d3 E1 B! ^5 x7 y) j* [
  • ( S0 b( |9 P9 E1 [: c$ x& \! `# D
    # y6 [  t& k9 q

######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("画布")
; Y5 ^$ U3 p4 ?1 Q4 }8 G

3222ca850649b6f730a155691403ec39.png

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

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

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

2 Y' o; D, o1 o6 _
                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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

  • - y$ E( ?* M  u1 P# F: t, a
  • , L& ^$ s3 {$ ]

  • ) a" i/ D8 U/ r; N$ U0 a7 ^
  • . @# d( u5 a$ |$ M+ E8 S
  • / Y! o" T6 K% R4 D( o. S: s$ y: i

  • ( R& Y; O- j) m- d% K5 V

  • 5 v  W" C) c* Y3 }
  • 9 J  b  u4 R: l3 J- |

  • ( j" I' b- v4 n

  • 9 J6 h( P5 J' }6 m1 t1 s6 A' s+ x% P
  • + Q$ @  x+ p9 L. [7 B# t

  • 4 s) \. l( @% ]! ?7 G! u

  •   l! O# N5 V/ s; D

  • 8 ~( U2 d$ r  T5 t

  • ( j: M3 J" {% C, d) G  l

  • # x4 g+ x( I. B8 f$ C; q% }
  • ( \" s5 u  M; w2 o0 A
  • 4 ~: X4 O1 K4 ]  e

  • # o2 X0 m5 d/ F/ K
  •   l0 n; m" ^1 K$ f

  • . V+ _0 f. A* G+ r  X
  • . B6 @( |% `4 y4 l. m3 F

  • % a& o3 Q9 \0 d3 v3 G' [* d# d; A9 ^9 d2 L6 P7 W- `

######引入库包############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()4 o9 ?6 A' ^# T( Z) g

/ o, D4 b) ~+ F' B& \


( L/ U0 T4 ~. \" K7 F                               
登录/注册后可看大图

0 ~' D- b, {0 {7 Q6 R

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • - i7 A: L- O7 V! F( v2 c( ]7 ]

  • ! i/ M  v+ p7 t, O
  • / H+ R" M* v# L* b6 A) L3 B
  • 9 ~; N3 P/ P  V

  • 9 m" x0 l( _$ A1 d6 P8 h
  • / e! g- e$ R9 q3 h- S) ]: c
  • % Q- q5 [2 u; p3 N

  • 6 ?; S7 E8 F+ `0 Q8 K& J8 w
  • / _6 P* ^( i) p
  • ! b& T9 u) m! X5 r( d1 ~

  • 1 H6 g/ t6 b/ K  A! O0 P; g7 f

  • % }6 U+ Y/ o3 w! i7 ^/ [

  • 9 Q$ }9 O  s# A& @" ^4 I8 s1 W% x: }; _

  • ! `3 }( ~9 K: g* a9 O

  • 8 g7 w6 A1 A( `) W/ L% y& d  M

  • % K+ M# C; c/ q6 f' ^' M

  • , b& J: s* d7 \* K. R. a& R
  • 3 O- W  P/ r# n' C  b! _- ~

  • 6 T. [, Z2 n9 }  M! n6 \9 I, E
  • % B, [( B1 }/ A6 c2 l1 c

  • 3 x: {' T1 b* ^1 t' {6 s9 @

  • 0 I3 @( s. n! F8 v0 u; O4 r9 n0 g
    & o+ B( @+ c- T- l" V6 A

######引入库包############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 N. g' R6 E  w2 U


- W0 z1 m% |0 t  ?/ m% o

  [4 f& m9 Y( g9 e
                               
登录/注册后可看大图

# x0 O- l1 B* F, A( \5 f( @2 r

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

9d9110a408fbe81329b7cfec01cfda76.png

  • ' n( v  c# P3 H

  • 1 P9 o& l. x/ J  ^
  • : a% a( y) N$ y0 ^& h
  • ' e( Z6 [/ F9 g, c! U8 l9 z+ M

  • $ K6 H1 g5 k$ z& Z& K. S5 A7 V
  • ! L/ q- X/ }/ l" X) X% M
  • $ B8 i  `0 P8 x) e7 O3 T
  • ) ~: }5 F; e' S& J! m
  • $ M( s! V2 p9 c+ l" I( k

  • * ]+ V! b: o/ L, ], V

  • 5 f& `' {1 Q' g/ F2 \
  • , z# Z4 k( A/ ~# B/ K, q  f
  • 3 L7 w' l1 d% M5 F4 U. t0 k
  • 8 H' Q9 {+ G) ^; R4 w0 O" r

  • 5 Y' O4 z# r3 B, `0 H
  • / d; j) E- N9 h  l- ?1 T  m! q; i

  • ! i1 ?4 K" x3 c& v2 `& t
  • $ l$ \' i! z; D

  • 5 P+ ^  f% x$ A* k9 U+ D5 D: x
  • 7 ]2 V+ W5 w7 {9 s5 o$ \0 E8 N

  • 6 w( d! W& z% b- M; I
    3 W- o  F* 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 = 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
快速回复 返回顶部 返回列表