面向对象访问 matplotlib 中的 fill_between 阴影区域

Object-oriented access to fill_between shaded region in matplotlib

我正在尝试访问 matplotlib 图的阴影区域,以便我可以在不执行 plt.cla() 的情况下将其删除 [因为 cla() 也清除了包括轴标签在内的整个轴]

如果我正在绘制 I 线,我可以这样做:

import matplotlib.pyplot as plt
ax = plt.gca()
ax.plot(x,y)
ax.set_xlabel('My Label Here')

# then to remove the line, but not the axis label
ax.lines.pop()

但是,为了绘制区域,我执行:

ax.fill_between(x, 0, y)

所以 ax.lines 是空的。

请问如何清除这个阴影区域?

the documentation 所述 fill_between returns 一个 PolyCollection 实例。集合存储在 ax.collections 中。所以

ax.collections.pop()

应该可以解决问题。

但是,我认为您必须小心删除正确的内容,以防 ax.linesax.collections 中有多个对象。您可以保存对该对象的引用,以便您知道要删除哪个对象:

fill_between_col = ax.fill_between(x, 0, y)

然后删除:

ax.collections.remove(fill_between_col)

编辑:另一种方法,可能是最好的方法:所有艺术家都有一种方法叫做remove,它完全符合您的要求:

fill_between_col.remove()