我想要实现的目标:带有两条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
?
这是目前的结果:
请注意,这是具有多个图的较大网格布局的一部分,但它们都在这些阴影区域周围留下类似的边距。
答案 0 :(得分:4)
严格来说,不是对获得外部限制的问题的答案,但它确实解决了问题。我应该使用:
,而不是使用fill_between
ax.axhspan(y1, y2, facecolor=c, alpha=0.5)
结果:
答案 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)