[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("···")

    5 S+ g/ E& j. r' T% ?

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

+ r( @) A, N  Q& b2 g9 ^& J! G

) l7 G6 ^* s' N; X

绘制简单气象数据图

  • : L: _4 W; R: @

  • ' S; \1 m4 @- ]0 j- g) L5 T6 o. b

  • 4 `( a  ?2 k, o4 U# L  L8 f3 ?
  • ) I, Y: O" q# z% f

  • % p! z, H& ]# ^' d& H6 [* t* b
  • 2 N4 p! J" R% w3 K2 r/ |: F

  • 7 p# O2 m+ r# G& ^, T$ a5 D8 H

  • . h6 Y- M* M8 L1 a) Z1 n

  • ! ~0 [, _$ |: i" l$ s* A
  • ' D$ }: X0 _9 v3 O. J/ R/ B
  • $ a4 o8 E% N7 |
  • # {3 B! y6 w8 h, U  e$ H
  • . S' N, s5 v4 L% J7 i2 q
  • 4 m, y* v# ^& ?( h- q
    7 \" o) I6 C7 r6 U/ e0 E* n: a

######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 Z( A2 C: M" w# t2 i* [! r

3222ca850649b6f730a155691403ec39.png

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

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

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


# i/ U' j( q9 s& q! o) |: ~                               
登录/注册后可看大图

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

a9db2c0d586d2c65693594bef673005e.png

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

  • * q# M6 _# m: O8 f2 c: ~

  • , P8 @" s8 b3 Z3 o" e# H

  • 5 `& s0 h: M) {: C9 G

  • ' e! t( d5 G' @) T
  • 1 f+ v3 B) n% @$ {

  • , [5 W$ p) s, K. ^7 S; O' Q

  • # m: }% D4 w: K  V$ h7 b4 Q

  • , u  P7 W( A. K8 C' r! W1 ^# {
  • 3 f: ?8 G. Z! q' y/ Y" U( f0 \3 A( {# {
  • ' W$ h& M$ u0 j9 y9 H
  • 8 N4 Y# g9 q7 w+ D

  • 0 j! G0 D  i0 p8 N/ P$ w
  • ' K" B0 D3 Z0 h# t* e) D
  • / }8 M& F  ]% m  x: R
  • & K# }- m# l% I9 {
  • 9 i, S* h2 c) a& E8 `% Q' |. G

  • ) ^- `# {9 x  T9 ~, O- \+ h( I7 i7 `

  • $ Y% S6 `1 |; l: N
  • : T, C3 G: I8 a# Y# f

  • & Y8 t* M2 ]. z, P9 X
  • & p7 M2 ?  b1 X$ _, k

  • " b1 F* b: T& d( w2 ?( O" d

  • 8 N9 n3 W- {, A. G+ a5 b; j5 o6 N" z- h' V6 }, g1 p

######引入库包############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()0 R" J6 p- q0 K, W


3 T( U* R2 _6 b! T

1 h5 h9 x9 V* B. K
                               
登录/注册后可看大图

5 m) |3 D$ r" S( n

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • . B( l% j. q) n9 S7 t1 X; j/ ^

  • " q+ V5 h, a2 D8 X. d5 w+ k- D
  • ' b2 D" k4 Y% s# l/ `1 }5 z
  •   H6 [5 C9 Q/ _: z" g$ p: l2 f

  • ( z6 I3 E! N# Z& P# Q

  • : N# v: H) }+ c6 H# v4 J
  • ( c. Q/ N. `" ^: {

  • ' N% t$ d, C6 O$ R' n; C
  • ( m5 J# n- j2 ?/ d  s, R  m" C

  •   [% ]. |$ ~. Z$ S2 N. `

  • & ~' u3 l7 V! b& _& `4 S

  • 8 K# w# m# C  O+ Z* m- l
  • ; \1 k; e" R- Q4 d2 N- k6 }! R

  • & l* P9 O6 [7 M/ c

  • 2 p6 m9 E  `; s6 |8 ]' A

  •   x% Y  S2 n7 c) U6 ~# E

  • - b# O) j1 Z' b( B6 e

  • 6 J- w3 H5 L( |& a& T3 k- T

  • 2 {6 t3 z' g1 o$ ]: I- }& y; y# ]2 r& X
  • 4 b! d- e3 |0 S. r

  • 5 m7 }  [8 i  V+ m8 ~6 \4 ~
  • 0 r, I* ^: x: N# Q' U+ M

    / Y6 T& w& P5 P7 z1 x6 X

######引入库包############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()
# m- C/ R, ]' n/ G6 I

: ~9 \5 N) z! S! l, {

4 j  H1 I4 h( g8 U- t$ G9 r" l) c
                               
登录/注册后可看大图


3 ]" E- [( ]# G

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

9d9110a408fbe81329b7cfec01cfda76.png


  • , d: O7 `2 d0 f9 u! ^5 |; v
  • 8 ~* Z7 A6 M+ _) ], Z. l
  • 8 P8 E! z/ m" i8 C) k0 \

  • 0 `3 R1 G# @, N' f) J: Y

  • - K$ U1 z! Y8 B, b6 A

  • ) `" |. j1 m" T/ [

  • & e6 B! A& K. H+ U( ^* Z- _( K
  • 3 Q  L! i5 s4 \' v7 K
  • 9 _1 q7 M$ C! r5 s% b

  • * L) F7 t* S4 F$ \  |

  • ' f% h; c6 n0 P7 `! }' m
  • " ^( o- j/ [9 I

  • # R3 t8 I2 d. h2 j; R! j

  • * T' K9 \  [# |2 x
  • 4 ~9 T$ x8 M6 h) Z! ]: T

  • 5 o# i" b2 e- l- [

  • + d4 H2 q& ~3 D. s5 u

  • % ~# f9 r" m( C8 ]2 z
  • & P# {+ c) [: @, |
  • ( A4 o$ L) U6 J7 U$ R/ O
  • 1 v: v# l$ q  Q; g' Y" A

    % Y. r+ |% I0 j- O1 b

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