在两个竖线之间填充

162 投票
1 回答
177522 浏览
提问于 2025-04-18 03:56

我查看了matplotlib文档中的一些例子,但我不太明白怎么画出填充两个特定竖线之间的区域。

比如说,我想在 x=0.2x=4 之间画一个图(覆盖整个 y 轴的范围)。我应该用 fill_betweenfill 还是 fill_betweenx 呢?

我可以用 where 条件来实现这个吗?

1 个回答

316

听起来你想用 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()

在这里输入图片描述

你也可以用 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()

在这里输入图片描述

撰写回答