Como desenhar lendas animadas para subtramas?

Eu gostaria de desenhar subtramas animadas com ArtistAnimation. Infelizmente, não consigo descobrir como ter uma lenda animada. Eu tentei diferentes methods que encontrei no StackOverflow. Se eu conseguir uma legenda, ela não será animada, mas apenas as legendas de todas as etapas de animação juntas.

Meu código é assim:

import numpy as np import pylab as pl import matplotlib.animation as anim fig, (ax1, ax2, ax3) = pl.subplots(1,3,figsize=(11,4)) ims = [] im1 = ['im11','im12','im13'] im2 = ['im21','im22','im23'] x = np.arange(0,2*np.pi,0.1) n=50 for i in range(n): for sp in (1,2,3): pl.subplot(1,3,sp) y1 = np.sin(sp*x + i*np.pi/n) y2 = np.cos(sp*x + i*np.pi/n) im1[sp-1], = pl.plot(x,y1) im2[sp-1], = pl.plot(x,y2) pl.xlim([0,2*np.pi]) pl.ylim([-1,1]) lab = 'i='+str(i)+', sp='+str(sp) im1[sp-1].set_label([lab]) pl.legend(loc=2, prop={'size': 6}).draw_frame(False) ims.append([ im1[0],im1[1],im1[2], im2[0],im2[1],im2[2] ]) ani = anim.ArtistAnimation(fig,ims,blit=True) pl.show() 

É assim que o resultado parece

Eu pensei que este código seria equivalente ao método usado aqui Como adicionar legenda / label em animação python, mas obviamente estou faltando alguma coisa.

Eu também tentei definir os labels como sugerido em Adicionar uma legenda para uma animação (de artistas) no matplotlib, mas eu realmente não entendo como usá-lo para o meu caso. Como isso

 im2[sp-1].legend(handles='-', labels=[lab]) 

Eu recebo um AttributeError: 'Line2D' object has no attribute 'legend' .

[EDIT]: Eu não disse claramente: eu gostaria de ter uma legenda para ambas as linhas nas plotagens.

Eu não sei exatamente como a legenda deve ser, mas imagino que você queira simplesmente mostrar o valor atual de uma linha do quadro atual. Portanto, é melhor atualizar os dados da linha, em vez de plotar 150 novos charts.

 import numpy as np import pylab as plt import matplotlib.animation as anim fig, axes = plt.subplots(1,3,figsize=(8,3)) ims = [] im1 = [ax.plot([],[], label="label")[0] for ax in axes] im2 = [ax.plot([],[], label="label")[0] for ax in axes] x = np.arange(0,2*np.pi,0.1) legs = [ax.legend(loc=2, prop={'size': 6}) for ax in axes] for ax in axes: ax.set_xlim([0,2*np.pi]) ax.set_ylim([-1,1]) plt.tight_layout() n=50 def update(i): for sp in range(3): y1 = np.sin((sp+1)*x + (i)*np.pi/n) y2 = np.cos((sp+1)*x + (i)*np.pi/n) im1[sp].set_data(x,y1) im2[sp].set_data(x,y2) lab = 'i='+str(i)+', sp='+str(sp+1) legs[sp].texts[0].set_text(lab) legs[sp].texts[1].set_text(lab) return im1 + im2 +legs ani = anim.FuncAnimation(fig,update, frames=n,blit=True) plt.show() 

insira a descrição da imagem aqui