在两条垂直线之间填充

156
我浏览了matplotlib文档中的示例,但我不清楚如何绘制两条特定垂直线之间的区域。
例如,假设我想在x=0.2x=4之间创建一个图表(对于图表的完整y范围)。我应该使用fill_betweenfill还是fill_betweenx
我可以使用where条件吗?
1个回答

308

看起来你需要的是 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()

这里输入图片描述


8
对于那些对使用fill_between来实现更“波动”的垂直线条感兴趣的人,可以看一下transform参数(以及这个答案)。 - Mr Tsjolder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接