J'ai un script d'animation python (en utilisant funcAnimation de matplotlib)), qui fonctionne dans Spyder mais pas dans Jupyter. J'ai essayé de suivre diverses suggestions, telles que l'ajout de "% matplotlib inline" et la modification du backend matplotlib. "Qt4agg", tout cela sans succès. J'ai aussi essayé de lancer plusieurs exemples d'animations (tirés des tutoriels de Jupyter), dont aucune n'a fonctionné. Parfois, un message d'erreur s'affiche et l'intrigue apparaît, mais ne s'anime pas. have obtenu pyplot.plot () pour qu'il utilise "% matplotlib inline".
Quelqu'un connaît-il un ordinateur portable Jupyter en état de fonctionnement avec un exemple d'animation en ligne SIMPLE utilisant funcAnimation? Merci d'avance pour l'aide!
[Note: je suis sur Windows 7]
"En ligne" signifie que les graphiques sont affichés sous forme de graphiques png. Ces images png ne peuvent pas être animées . Bien qu'en principe, on puisse créer une animation en remplaçant successivement les images png, ce n'est probablement pas souhaitable.
Une solution consiste à utiliser le bloc-notes du bloc-notes, qui est entièrement compatible avec FuncAnimation
car il rend la figure de matplotlib elle-même:
%matplotlib notebook
À partir de matplotlib 2.1, nous pouvons créer une animation à l'aide de JavaScript. Ceci est similaire à la solution ani.to_html5()
, sauf qu'elle ne nécessite aucun codec vidéo.
from IPython.display import HTML
HTML(ani.to_jshtml())
Quelques exemples complets:
import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np
t = np.linspace(0,2*np.pi)
x = np.sin(t)
fig, ax = plt.subplots()
ax.axis([0,2*np.pi,-1,1])
l, = ax.plot([],[])
def animate(i):
l.set_data(t[:i], x[:i])
ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))
from IPython.display import HTML
HTML(ani.to_jshtml())
Sinon, faites de jsanimation la valeur par défaut pour afficher les animations,
plt.rcParams["animation.html"] = "jshtml"
Puis, à la fin, indiquez simplement ani
pour obtenir l’animation.
Voir aussi cette réponse pour un aperçu complet.
Voici un exemple simple dans ce tutoriel: http://louistiao.me/posts/notebooks/embedding-matplotlib-animations-in-jupyter-notebooks/
Pour résumer le tutoriel ci-dessus, vous avez essentiellement besoin de quelque chose comme ceci:
from matplotlib import animation
from IPython.display import HTML
# <insert animation setup code here>
anim = animation.FuncAnimation() # With arguments of course!
HTML(anim.to_html5_video())
Cependant ...
J'ai eu beaucoup de difficulté à le faire fonctionner. En gros, le problème était que ce qui précède utilise (par défaut) ffmpeg
et le x264
codec en arrière-plan mais ceux-ci n'ont pas été configurés correctement sur ma machine. La solution consistait à les désinstaller et à les reconstruire à partir du source avec la configuration correcte. Pour plus de détails, consultez la question que j'ai posée à ce sujet avec une réponse claire de Andrew Heusser: Animations dans le cahier ipython (jupyter) - ValueError: opération d'E/S sur un fichier fermé
Alors, essayez le to_html5_video
La solution ci-dessus en premier, et si cela ne fonctionne pas, essayez également la désinstallation/la reconstruction de ffmpeg
et x264
.
Voici la réponse que j'ai composée de plusieurs sources, y compris les exemples officiels. J'ai testé avec les dernières versions de Jupyter et Python.
imageList
est la seule chose à modifier. C'est une liste d'images (votre saisie).importer numpy en tant que np importer matplotlib.pyplot en tant que plt importer matplotlib.animation en tant qu'animation à partir de IPython.display importer HTML # ====================================== # Créer de fausses images à l’aide de Numpy # Vous n’avez pas besoin de cela dans votre code car vous avez votre propre imageList. # Ceci est utilisé à titre d’exemple. imageList = [] x = np.linspace (0, 2 * np.pi, 120) y = np.linspace (0, 2 * np.pi, 100 ) .reshape (-1, 1) pour i dans la plage (60): x + = np.pi/15. y + = np.pi/20. imageList.append (np.sin (x) + np.cos (y)) # ================ ======================== # Animer de fausses images (dans Jupyter) Def getImageFromList (x): renvoie imageList [x] fig = plt.figure (figsize = (10, 10)) ims = [] pour i dans la plage (len (imageList)): im = plt.imshow (getImageFromList (i), animated = True) ims.append ([im]) ani = animation.ArtistAnimation (fig, ims , intervalle = 50, blit = True, repeat_delay = 1000) plt.close () # Afficher l'animation HTML (ani.to_html5_video ()) # ====================================== == # Enregistrer l'animation sous forme de vidéo (si nécessaire) # Ani.save ('dynamic_images.mp4')