簡體   English   中英

為什么我需要從我的 matplotlib Axes 中刪除補丁兩次才能將它們全部刪除?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM