面向对象访问 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.lines
或 ax.collections
中有多个对象。您可以保存对该对象的引用,以便您知道要删除哪个对象:
fill_between_col = ax.fill_between(x, 0, y)
然后删除:
ax.collections.remove(fill_between_col)
编辑:另一种方法,可能是最好的方法:所有艺术家都有一种方法叫做remove
,它完全符合您的要求:
fill_between_col.remove()
我正在尝试访问 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.lines
或 ax.collections
中有多个对象。您可以保存对该对象的引用,以便您知道要删除哪个对象:
fill_between_col = ax.fill_between(x, 0, y)
然后删除:
ax.collections.remove(fill_between_col)
编辑:另一种方法,可能是最好的方法:所有艺术家都有一种方法叫做remove
,它完全符合您的要求:
fill_between_col.remove()