在 matplotlib 中填充两条垂直线之间

我阅读了 matplotlib文档中的 例子,但是我不清楚如何制作一个填充两条特定垂直线之间区域的图。

例如,假设我想在 x=0.2x=4之间创建一个绘图(对于绘图的完整 y范围)。我应该使用 fill_betweenfill还是 fill_betweenx

我可以使用 where条件吗?

146582 次浏览

这听起来像是您想要 axvspan,而不是函数之间的填充之一。不同之处在于,无论您如何缩放,axvspan(和 axhspan)都将填充整个绘图的 y (或 x)区域。

例如,让我们使用 axvspan来突出显示8到14之间的 x 区域:

import matplotlib.pyplot as plt


fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, alpha=0.5, color='red')


plt.show()

enter image description here

您可以使用 fill_betweenx来完成这项工作,但是矩形的区段(x 和 y)应该在 数据坐标中。在 axvspan中,矩形的 y 区段默认为0和1,位于 坐标轴中(换句话说,就是图形高度的百分比)。

为了说明这一点,让我们将矩形从高度的10% 扩展到90% (而不是完全扩展)。尝试缩放或平移,注意 y 区段表示固定在显示空间,而 x 区段表示随着缩放/平移而移动:

import matplotlib.pyplot as plt


fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, ymin=0.1, ymax=0.9, alpha=0.5, color='red')


plt.show()

enter image description here