Ich versuche, dynamische Anzahl von Künstlern in der Update-Funktion der Animation zu zeichnen. Insbesondere wollte ich die Peaks einer Spektraldichtekurve mit beweglicher Leistung beschriften. Es gibt keine Garantie, dass die Anzahl der Spitzen wird das gleiche sein, so kann ich nicht verwenden text.set_text, hier ist was ich verwenden:Matplotlib Animation zeichnen dynamische Künstler ohne Blit
def update(i):
global line, frequency, psdmatrix, text, recordline, ax
text.set_text('Period ' + str(i))
line.set_data(frequency, psdmatrix[i])
maxlist = get_max(psdmatrix[i])
texts = []
for each in maxlist:
freq = frequency[each[0]]
texts.append(ax.text(freq, each[1]*3, 'Peak %.02f' % freq))
return line, recordline, texts
jedoch Texte nicht selbst mit jeder Iteration löschen, anstatt sie übereinander gestapelt, mit wenigen Iterationen gibt es Hunderte von Textkünstlern. Gibt es einen effizienten Weg, wo ich die Texte loswerden kann, ohne andere stabilere Elemente loszuwerden? Ich bin auf Mac, also kann ich Blit = True nicht verwenden. Das resultierende Bild ist wie folgt aus:
All the texts objects are on top of each other
Dank!
Wenn das einzige Problem ist, 'blit = true' zu verwenden, würde ich es erraten funktioniert, wenn Sie ein anderes Backend verwenden, z 'importieren Sie Matplotlib; matplotlib.use ("TkAgg") '. Es scheint sogar, dass das Macos-Backend [sollte jetzt Animationen unterstützen] (https://github.com/matplotlib/matplotlib/pull/6178). – ImportanceOfBeingErnest