在两个竖线之间填充
我查看了matplotlib文档中的一些例子,但我不太明白怎么画出填充两个特定竖线之间的区域。
比如说,我想在 x=0.2
和 x=4
之间画一个图(覆盖整个 y
轴的范围)。我应该用 fill_between
、fill
还是 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()