python - 为什么我需要从我的 matplotlib Axes 中删除两次补丁才能将它们全部删除?
问题描述
我在matplotlib
Axes
objectself.a
上定义了一个matplotlib
canvas
object 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
。
解决方案
因为这还没有被触及:matplotlib 内部似乎存在一个问题gid
,每个标记的项目都需要是唯一的。如果您在任何地方重用,它似乎会导致一些无声的失败gid
。
推荐阅读
- ios - 使用身体 Alamofire 发布请求
- php - Symfony 5.1 选择列表过滤
- javascript - Cognito - adminRespondToAuthChallenge 返回用户的无效会话
- python - 如何避免每天多次抓取网站时下载重复文件(pdf)?
- java - 如何在 Spring 中从组件调用配置中的 SFTP 出站网关操作
- powershell - 在 Powershell 中以自定义格式将数据导出到 CSV 文件
- stripe-payments - Stripe 支付意图是在确认之前还是之后搁置?
- flutter - 蓝牙串行接收消息时出现问题
- sql - 如何在 Redshift 中选择 x 和 y 之间的行
- structure - 从另一个表ABAP动态获取值字段