【问题标题】:Shade the area between two axhline using matplotlib使用 matplotlib 对两个 axhline 之间的区域进行着色
【发布时间】:2017-11-30 07:31:27
【问题描述】:

我想要实现的目标:一个带有两条轴水平线的图,它们之间的区域是阴影的。

迄今为止最好的:

    ax.hline(y1, color=c)
    ax.hline(y2, color=c)
    ax.fill_between(ax.get_xlim(), y1, y2, color=c, alpha=0.5)

问题是这会在阴影区域的左右两侧留下少量空白。

我了解这可能是由于绘图在绘图的已用/数据区域周围创建了一个边距。那么,如何让fill_between 实际覆盖整个绘图,而无需 matplotlib 在绘制后重新缩放 x 轴? get_xlim 是否有替代方案可以给我适当的情节限制,或者fill_between 的替代方案?

这是当前结果:

请注意,这是包含多个绘图的较大网格布局的一部分,但它们都在这些阴影区域周围留下了相似的边距。

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    严格来说,不是对获得外部限制的问题的回答,但它确实解决了问题。而不是使用fill_between,我应该使用:

        ax.axhspan(y1, y2, facecolor=c, alpha=0.5)
    

    结果:

    【讨论】:

      【解决方案2】:

      ax.get_xlim() 确实返回轴的限制,而不是数据的限制:

      Axes.get_xlim()

      以元组(左、右)的形式返回当前的 x 轴范围。

      但 Matplotlib 只是在绘制 fill_between 后重新调整 x 轴:

      import matplotlib.pylab as pl
      import numpy as np
      
      pl.figure()
      ax=pl.subplot(111)
      pl.plot(np.random.random(10))
      
      print(ax.get_xlim())
      
      pl.fill_between(ax.get_xlim(), 0.5, 1)
      
      print(ax.get_xlim())
      

      这会导致:

      (-0.45000000000000001, 9.4499999999999993)

      (-0.94499999999999995, 9.9449999999999985)

      如果您不想手动设置 x 限制,您可以使用类似:

      import matplotlib.pylab as pl
      import numpy as np
      
      pl.figure()
      ax=pl.subplot(111)
      pl.plot(np.random.random(10))
      
      xlim = ax.get_xlim()
      
      pl.fill_between(xlim, 0.5, 1)
      
      ax.set_xlim(xlim)
      

      【讨论】:

      • 它认为这是一个很好的补充,有助于解释发生了什么,但我认为我自己提供的答案实际上是遇到同样问题的人的最佳答案(即使用 axhspan 而不是 fill_between) .你同意吗?
      • 您的解决方案解决了您的问题,因此接受您自己的答案完全没问题,我的回答主要是解决您的 "...get_xlim 将返回数据的限制,而不是实际情节。”,这是一个误解。
      • 我实际上删除了不正确的假设,以避免有人从问题中带走错误的信息。
      猜你喜欢
      • 2011-04-10
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 2021-08-02
      • 2016-06-21
      相关资源
      最近更新 更多