如何移除Matplotlib绘图中的填充图形?保留背景与设置
问题描述
我在Matplotlib绘图中通过以下代码添加了三角形填充:
ax.fill([x1, x2, x3], [y1, y2, y3], 'r', alpha = 0.5)
当复用该图表展示其他数据集时,无法移除这个填充对象。我的绘图包含标记、线条和单个填充,目前重置图表使用的代码是:
EraseMarkers() # 移除标记 for i in ax.get_lines(): i.remove() # 移除线条
我尝试过ax.cla()函数,但它会清除整个绘图,而我希望保留设置好的背景图片和其他配置。绘图初始化代码如下:
fig = Figure(figsize = (9, 3.8), dpi = 100) img = plt.imread('Rink2.png') ax = fig.add_subplot(111) img = ax.imshow(img, extent=[-100, 100, -42.5, 42.5]) ax.get_xaxis().set_visible(False) ax.get_yaxis().set_visible(False) ax.axis('off')
我需要一种无需清除背景和设置,即可移除所有绘图对象(标记、线条和填充)的简便方法,或者仅移除填充的方法。
解决方案
仅移除填充对象
方式1:保存填充引用直接删除
在创建填充时保存返回的对象引用,后续需要移除时直接调用remove():
# 创建填充时保存引用 fill_obj = ax.fill([x1, x2, x3], [y1, y2, y3], 'r', alpha = 0.5) # 移除填充 fill_obj[0].remove()
注:
ax.fill()返回的是包含单个PolyCollection对象的列表,所以需要取索引0。
方式2:遍历轴的collections删除
如果之前没有保存引用,可以遍历轴上的collections(填充属于PolyCollection,归类在ax.collections中)来移除:
for collection in ax.collections: collection.remove()
一次性移除所有动态绘图元素
在你现有清理代码的基础上,加上清理collections的逻辑,就能一次性移除标记、线条和填充,同时保留背景图片和轴配置:
# 移除标记(保留你的自定义方法) EraseMarkers() # 移除所有线条 for line in ax.get_lines(): line.remove() # 移除所有填充及其他collections类型元素 for collection in ax.collections: collection.remove()
执行这段代码后,背景图片、坐标轴隐藏等初始化配置都会保留,仅清理你后续添加的动态绘图元素。
内容的提问来源于stack exchange,提问作者KG_
相关产品推荐
相关产品推荐

