收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

[Python] 【气候软件】Python8:绘制面积图和填充图

[复制链接]

气象数据可视化主要依靠matplotlib做绘图,其他库包为辅助,包括数据处理的,地理信息处理的等等。


+ f9 F# E5 P- z# U. I, i

绘图主要有六步(“六部曲”)(不是绝对的方法,视具体情况使用):

  • 引入库包: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("···")

    - |' |: G% C2 J9 \7 M

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


* V: K- f& }0 h' h: n1 r

绘制面积图和填色图

2b2b8cffc67a22fcc69646ca599a3645.png

(有的时候需要画这种交差的填充图,能直观地表达差值的变化和含义。)

014dfdb505f25bf97af4e4013898632f.png

下面直接上代码(关于代码的解释已在注释中详细说明,应该能理解):


  • , P, K, W* A7 y' `

  • 1 c/ p- w* \9 ~7 W' [

  • $ e# U& E2 |0 N+ J

  • 0 ?  {) c" L: @& V

  • 7 c" }/ C) i2 e. d  y# v( \& E" v
  • 7 l7 X: `! C6 ?2 k# D( y
  • ' d7 u0 V* |6 P$ G; F# o

  • 7 l) U% j, v* m- S+ J, W

  • & J/ f1 j; P: g/ b8 ^7 q
  • ) S6 R9 {' C3 N- d
  • 7 J5 A3 A! I9 O, L$ V# X
  • : `  P* c8 T, ^+ g9 |. G5 m/ J1 w$ }
  • 9 ^: S7 c! O. t4 }  R; r4 L
  • ; u( d: [" B" @9 A' C( x

  • , v; e' n0 d8 S6 o! C6 n% u- C

  • % {; ^! O' ^3 e8 H, f1 X

  • 6 R! Q' T7 ~; [- S

  • 7 B( W$ }/ w) }1 O: a

  •   P4 ^5 f# {9 _7 ?, {6 P/ K) n$ p( a

  • 6 d1 C* ^/ T' {% Z
  • " m& @5 |4 \  {) }* `& q
  • 1 E: p9 h# g4 d$ J# p4 f$ @: L6 S( G

  • ' W& t- y: }; H9 a+ S4 k- c3 u

  •   l. J) R2 F! j' P9 Y& i/ {  L- |
  • 1 ?6 P, o4 k$ k! Z: x

  • 6 d8 z, }, L- L& p8 l, D

  • 6 U: z# o' i6 @/ d' Z

  • 4 `; `8 B0 n# X% c1 V: [: v7 p

  • 5 u5 w$ k  N+ A8 i/ y. }
  •   O$ H5 m2 F( B+ J3 H, j

  • + ?0 O' W4 M) `0 J0 r
  • 4 m5 J& H1 \6 E: i/ k9 ~
  • - q3 Q, w0 I5 n, O
  • " \! C8 k: X9 [6 }2 A' g/ E

  • " q& J& Z# w& l6 @6 |& o
  • , O; J1 \4 G( X3 g+ i
  • 9 K8 _6 |  n2 q8 \* c" @; ?" c

  • . j9 G  W4 A/ u+ {

  • ' r2 H: e" o' O2 @

  • 5 J/ |; N& ~! O' g9 R& n
  •   W6 y* A( P6 m$ [1 N

  • ) j% h6 a- r2 _3 F$ |' y) R
  • / R$ A7 B& k  y: _( }4 h1 u# u: K
  • - L* y( ^3 ?5 f- R. C$ T, e

    : {: _- B! e$ S' p7 }, i; a

#引库importnumpy asnpimportmatplotlib.pyplot aspltimportpandas aspd#中文及负号处理plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'plt.rcParams['axes.unicode_minus'] = False#画布fig = plt.figure(figsize=(15,6), dpi=200)ax1, ax2 = fig.subplots(1, 2)#数据x = np.arange(0.0, 2, 0.01)y1 = np.sin(2*np.pi*x)y2 = 1.2*np.sin(4*np.pi*x)#绘图#子区域1绘制限定区域填充图labels = ["Fibonacci ", "Evens"] ax1.plot(x, y1, ls='-', lw='2', c='k', label='$y1$')ax1.plot(x, y2, ls='--', lw='2', c='r', label='$y2$')ax1.legend(loc='upper right', fontsize=10)   #图例位置#ax1.set_xticks([])  #取消横轴刻度#ax1.set_yticks([])  #取消纵轴刻度ax1.set_title('fill between where')  #图标题ax1.set_xlabel('x')   #横坐标标题ax1.set_ylabel('y')   #纵坐标标题#填充图还支持限定条件下的区域填充ax1.fill_between(x,y1=y1,y2=y2, where=(y1>=y2), color='skyblue')  #对y1>=y2的区域填色ax1.fill_between(x,y1=y1,y2=y2, where=(y2>=y1), color='yellow')   #对y2>=y1的区域填色#添加标注。xy:标注箭头想要指示的点,xytext:描述信息的坐标ax1.annotate('y1>y2', xy=(0.3, 0), xytext=(0, -0.5), arrowprops=dict(facecolor='black', shrink=0.01))ax1.annotate('y2>y1', xy=(1.7, 0), xytext=(1.8, 0.5), arrowprops=dict(facecolor='black', shrink=0.01))#子区域2绘制堆积面积图ax2.stackplot(x, y1, labels=labels, color='yellow') #堆积面积图ax2.set_title('area picture')  #图标题ax2.set_xlabel('x')   #横坐标标题ax2.set_ylabel('y')   #纵坐标标题#出图plt.show()


8 I* ]8 k7 N! d6 X& U$ L3 G0 _
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
admin
活跃在2026-5-16
快速回复 返回顶部 返回列表