使用matplotlib遮蔽两个axhline之间的区域

时间:2017-11-30 07:31:28

标签: python matplotlib plot

我想要实现的目标:带有两条axhline水平线的图,其间的区域为阴影。

迄今为止最好的:

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

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

据我所知,这可能是因为情节在图的使用/数据区域周围创建了边距。那么,如何在没有matplotlib绘制后重新缩放x轴的情况下让fill_between实际覆盖整个绘图?是否有替代get_xlim可以给我适当的情节限制,或替代fill_between

这是目前的结果:

The current result

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

2 个答案:

答案 0 :(得分:4)

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

,而不是使用fill_between
    ax.axhspan(y1, y2, facecolor=c, alpha=0.5)

结果:

enter image description here

答案 1 :(得分:1)

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)