Animation de son titre dans matplotlib
Je ne peux pas comprendre comment obtenir un titre animé de travail sur un FuncAnimation l'intrigue (qui utilise blit). Basé sur http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/ et Python/Matplotlib - Rapidement la mise à Jour du Texte sur les Axes, j'ai construit une animation, mais le texte de pièces de ne pas les animer. Exemple simplifié:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
vls = np.linspace(0,2*2*np.pi,100)
fig=plt.figure()
img, = plt.plot(np.sin(vls))
ax = plt.axes()
ax.set_xlim([0,2*2*np.pi])
#ttl = ax.set_title('',animated=True)
ttl = ax.text(.5, 1.005, '', transform = ax.transAxes)
def init():
ttl.set_text('')
img.set_data([0],[0])
return img, ttl
def func(n):
ttl.set_text(str(n))
img.set_data(vls,np.sin(vls+.02*n*2*np.pi))
return img, ttl
ani = animation.FuncAnimation(fig,func,init_func=init,frames=50,interval=30,blit=True)
plt.show()
Si blit=True
est supprimé, le texte s'affiche, mais il ralentit. Il semble échouer avec plt.title
, ax.set_title
, et ax.text
.
Edit: j'ai trouvé pourquoi le deuxième exemple dans le premier lien travaillé; le texte était à l'intérieur de la img
partie. Si vous faites le au-dessus de 1.005
un .99
, vous verrez ce que je veux dire. Il y a probablement un moyen de faire cela avec une zone de délimitation, en quelque sorte...
Vous devez vous connecter pour publier un commentaire.
Voir L'animation de matplotlib axes/tiques et python matplotlib blit d'axes ou sur les côtés de la figure?
Donc, le problème, c'est que dans les entrailles de
animation
où le blit les décors sont réellement sauvé (ligne 792 de animation.py), il s'empare de ce qui est dans le axes de la boîte englobante. Cela a un sens quand vous avez plusieurs axes indépendamment d'animation. Dans votre cas, vous n'avez qu'unaxes
à s'inquiéter et que nous voulons animer des trucs à l'extérieur des axes de la boîte englobante. Avec un peu de monkey patching, un niveau de tolérance pour atteindre dans les entrailles de la mpl et de fouiller un peu, et l'acceptation de la plus rapide et la dirtyest solution, nous pouvons résoudre votre problème en tant que tel:Noter que cela peut ne pas fonctionner comme prévu si vous avez plus d'un des axes de votre figure. Une bien meilleure solution est d'étendre le
axes.bbox
juste assez pour capturer votre titre + axe étiquettes de graduation. Je pense qu'il y est un code quelque part dans mpl de le faire, mais je ne sais pas où il est sur le dessus de ma tête.repeat=False
dans leFuncAnimation
appel, puis attendez jusqu'à ce que l'animation de finitions et de zoom en quelque part, le dessin disparaît.À ajouter à tcaswell de "monkey patching" solution, voici comment vous pouvez ajouter une animation à l'axe étiquettes de graduation. Plus précisément, pour animer l'axe des x, jeu
ax.xaxis.set_animated(True)
et retourax.xaxis
de l'fonctions d'animation.Si vous avez besoin de corriger le titre, vous pouvez simplement mettre à jour le titre avec:
Voir la figure API document.
Vous devez appeler
Après
Il y a ici un exemple très simple d'un texte-l'animation à l'intérieur d'une figure "sans FuncAnimation()". Essayez, vous verrez, si cela est utile pour vous.
blit=False
n'. J'espérais juste redessiner le texte.canvas.blit
. J'ai pensé que l'animation a été une nouvelle/méthode préférée (au cours de la construction manuellement).