我正在尝试在动画的更新功能中绘制动态数量的艺术家。具体来说,我想标记移动功率谱密度图的峰值。无法保证峰值的数量是相同的,因此我不能使用text.set_text,这是我使用的:
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
然而,文本并没有在每次迭代中清除自己,而是相互叠加,几次迭代就有数百个文本艺术家。有没有一种有效的方法可以摆脱文本而不去除其他更稳定的元素?我在Mac上,所以我不能使用blit = True。生成的图像如下:
All the texts objects are on top of each other
谢谢!
答案 0 :(得分:0)
您可以在创建新文本之前从图中删除旧文本。
在函数外部定义texts
并迭代它以删除和删除旧文本。因此,以下内容适用于blit=False
:
texts = []
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])
for t in texts:
t.remove()
del t
texts[:] = []
for each in maxlist:
freq = frequency[each[0]]
texts.append(ax.text(freq, each[1]*3, 'Peak %.02f' % freq))
(请注意,由于缺少mcve,这是未经测试的。)