首页 > 解决方案 > 为什么我需要从我的 matplotlib Axes 中删除两次补丁才能将它们全部删除?

问题描述

我在matplotlib Axesobjectself.a上定义了一个matplotlib canvasobject self.fold_canvas。在其构建过程中,有时我在地块上绘制了一堆透明框,通过

self.a.axvspan(bins[lower],bins[upper],color=palette[i],alpha=0.3, gid='foldstate')

后来,我想摆脱它们。我使用循环执行此操作:

for p in self.a.patches:
    if p.get_gid() == 'foldstate':
        p.remove()
self.fold_canvas.draw()

出于某种原因,此循环会删除除一个实例之外的所有axvspan实例。如果我再做一次,即

for p in self.a.patches:
    if p.get_gid() == 'foldstate':
        p.remove()
for p in self.a.patches:
    if p.get_gid() == 'foldstate':
        p.remove()
self.fold_canvas.draw()

它按预期工作,并且所有的 axvspan 都被删除了。

为什么我需要循环两次才能将它们全部删除?

编辑:似乎将它们全部标记为唯一gid可以解决问题,因此当多个补丁共享相同时,它可能与内部问题有关gid

标签: pythonmatplotlib

解决方案


因为这还没有被触及:matplotlib 内部似乎存在一个问题gid,每个标记的项目都需要是唯一的。如果您在任何地方重用,它似乎会导致一些无声的失败gid


推荐阅读