J'essaie d'utiliser Un excellent exemple est donné ici . Le lien utilise J'ai annexé le code ci-dessous qui montre mes tentatives de reproduction de ces résultats, mais les X-LIMITS semblent prendre leurs valeurs finales au lieu de incrémentation avec le temps. J'ai également essayé d'incrémenter la solution (par opposition à l'axe) en traitant uniquement les valeurs de la fenêtre qui seront visibles dans le sous-champ, mais cela n'écriment pas les valeurs d'axe des x. J'ai également essayé d'implémenter l'autocaling mais l'axe X ne met toujours pas à jour. P> J'ai aussi trouvé cette question qui est pratiquement le même problème, mais la question n'a jamais été répondue. p> Voici mon code: P> matplotlib.artistanimation code> pour animer deux sousplots. Je souhaite que l'axe des X augmente la valeur que l'animation progresse, de sorte que la longueur totale de l'animation soit 100 mais à tout moment, le sous-champ ne me présente que les valeurs de temps de 0 à 24, puis comporte jusqu'à 100.
FunCanimation CODE> et met à jour les étiquettes de l'axe X dans une mode roulante à l'aide de
tracé (). Axes.set_xlim () code> et incrémentation des valeurs x. Le code est disponible via le lien ci-dessous la vidéo YouTube dans le lien fourni. P>
import matplotlib.pylab as plt
import matplotlib.animation as anim
import numpy as np
#create image with format (time,x,y)
image = np.random.rand(100,10,10)
#setup figure
fig = plt.figure()
ax1=fig.add_subplot(1,2,1)
ax2=fig.add_subplot(1,2,2)
#set up viewing window (in this case the 25 most recent values)
repeat_length = (np.shape(image)[0]+1)/4
ax2.set_xlim([0,repeat_length])
#ax2.autoscale_view()
ax2.set_ylim([np.amin(image[:,5,5]),np.amax(image[:,5,5])])
#set up list of images for animation
ims=[]
for time in xrange(np.shape(image)[0]):
im = ax1.imshow(image[time,:,:])
im2, = ax2.plot(image[0:time,5,5],color=(0,0,1))
if time>repeat_length:
lim = ax2.set_xlim(time-repeat_length,time)
ims.append([im, im2])
#run animation
ani = anim.ArtistAnimation(fig,ims, interval=50,blit=False)
plt.show()
3 Réponses :
Cela déplace votre axe, mais est très lent.
Vous n'avez pas besoin de ré-créer les objets code> imshow iM> à chaque fois, utilisez set_data code> à la place.
Si vous ne em> pas besoin de blâmer fonctionnera. P> Si vous devez exécuter plus rapidement, vous devez jouer à des jeux avec la boîte de sélection utilisée pour le blâmer de manière à ce que les étiquettes des axes soient mises à jour. P> P>
J'espérais que je pourrais le faire courir en utilisant l'artisanimation mais éventuellement mordre la balle et réécrit le code. Il semble courir en douceur.
Si vous utilisez un blindage, vous pouvez appeler Ceci met à jour la figure entière, de sorte que relativement lent, mais il est acceptable si vous n'appelez pas de nombreux articles. P> pyplot.draw () code> pour redessiner toute la figure, chaque fois que vous modifiez l'axe Y / x. P>
Stackoverflow.com/questions/17558096/... <- Pour obtenir Blit pour mettre à jour les étiquettes
Stackoverflow.com/questions/17888593/... < / a>
l'animation ne fonctionnera pas lorsque j'utilise Blit, pas encore sûr pourquoi