[英]Why do I need to remove patches twice from my matplotlib Axes in order to remove them all?
我有一個matplotlib
Axes
對象self.a
上定義的matplotlib
canvas
對象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
它似乎會導致一些靜默失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.