Comment animer une séquence chronologique de parcelles de matplotlib
Je veux tracer une séquence de .les images png en matplotlib. L'objectif est de tracer rapidement pour simuler l'effet d'un film, mais j'ai d'autres raisons de vouloir éviter de créer réellement un .fichier avi ou de l'enregistrement matplotlib chiffres et l'affichage dans l'ordre, à l'extérieur de Python.
Je suis spécialement essayez d'afficher les fichiers d'image dans la séquence à l'intérieur d'une boucle en Python. En supposant que j'ai importé matplotlib correctement, et j'ai mes propres fonctions 'new_image()' et 'new_rect()', voici un exemple de code qui ne fonctionne pas en raison de l'effet de blocage de la méthode show() de l'appel à la GUI mainloop:
for index in index_list:
img = new_image(index)
rect = new_rect(index)
plt.imshow(img)
plt.gca().add_patch(rect)
plt.show()
#I also tried pausing briefly and then closing, but this doesn't
#get executed due to the GUI mainloop from show()
time.sleep(0.25)
plt.close()
Le code ci-dessus fonctionne pour n'afficher que la première image, mais ensuite, le programme se bloque et m'attend pour fermer manuellement la résultante de la figure de la fenêtre. Une fois que je ne la fermez, puis le programme se bloque et ne pas re-terrain avec les nouvelles données de l'image. Que dois-je faire? Note aussi que j'ai essayé de remplacer le plt.show() commande avec un plt.draw() de commande, puis en ajoutant le plt.show() en dehors de la boucle for. Cela ne veut pas afficher quoi que ce soit et se contente d'.
source d'informationauteur ely
Vous devez vous connecter pour publier un commentaire.
Basé sur http://matplotlib.sourceforge.net/examples/animation/simple_anim_tkagg.html:
plt.imshow
peut accepter un float array, array uint8, ou une image de PIL.Donc, si vous avez un répertoire de fichiers PNG, vous pouvez les ouvrir comme PIL images et de les animer comme ceci:
La meilleure façon que j'ai trouvé pour cet été avec la commande
pylab.ion()
après l'import pylab.Voici un script qui utilise la
show()
mais qui affiche les différentes parcelles à chaque foispylab.draw()
est appelé, et qui laisse l'intrigue windows montrant indéfiniment. Il utilise de simples logique d'entrée pour décider du moment de fermer les chiffres (parce que l'utilisationshow()
signifie pylab ne sera pas le traiter clique sur le windows bouton x), mais qui devrait être simple à ajouter à votre interface utilisateur graphique, comme un bouton ou un champ de texte.Par la modification de la logique de base ici, je peux l'avoir à fermer les fenêtres et de la parcelle images consécutives pour simuler la lecture d'un film, ou je peux les maintenir clavier de contrôle sur la façon dont il suit à travers le film.
Remarque: Ce qui a fonctionné pour moi sur toutes les plateformes et semble strictement supérieure à la fenêtre de la toile gestionnaire de l'approche ci-dessus, et ne nécessite pas l' 'TkAgg' option.
J'ai mis en œuvre une pratique de script qui vient convient à votre besoin. Essayer ici
Ci-dessous est un exemple qui montrent des images de concert avec sa boite: