Je suis en train d'utiliser python et matplotlib pour créer une animation simple. Mon code est le suivant:
import matplotlib
#matplotlib.use('TkAgg')
from matplotlib import animation as animation
from matplotlib import pyplot as plt
import numpy as np
def w(q): return np.exp(-q**2)
support_q = np.linspace(-10,10,200)
support_q1 = np.linspace(-10,10,30)
list_w = [[w(q-q1) for q in support_q] for q1 in support_q1]
fig = plt.figure()
ax = fig.add_subplot(111, xlabel='q', ylabel='w(q-q\')')
line_w, = ax.plot(support_q, list_w[0])
plt.axhline(dashes=[10], zorder=0)
ax.xaxis.major.locator.set_params(nbins=12)
ax.yaxis.major.locator.set_params(nbins=5)
def animate(i):
line_w.set_ydata(list_w[i])
return line_w,
anim = animation.FuncAnimation(fig, animate, frames=len(support_q1), interval=10, blit=False)
#anim.save('animation.mp4')
plt.show()
Le code s'exécute correctement et produit l'animation que je souhaite. Cependant, si j'inclus une commande d'enregistrement anim.save('animation.mp4')
juste avant de montrer l'animation, j'obtiens le code d'erreur suivant:
File "/Users/usr1/Library/Python/3.5/lib/python/site-packages/matplotlib/backends/backend_agg.py", line 166, in draw_path
self._renderer.draw_path(gc, path, transform, rgbFace)
ValueError: la séquence de tirets doit avoir un nombre pair d'éléments
Je suis sur Mac OS X. La même erreur exacte se produit si, au lieu d'enregistrer l'animation, j'essaie de changer le backend en TkAgg (en utilisant matplotlib.use('TkAgg')
). Changer le backend est une solution de contournement pour les utilisateurs Mac qui veulent utiliser l'option blit=True
dans FuncAnimation
(voir ici), mais je ne suis pas capable de l'implémenter à cause de cette erreur.
J'ai compris que le problème vient du fait d'ajouter un axe en pointillés au tracé. Autrement dit, si je supprime la ligne
plt.axhline(color='k', dashes=[10], zorder=0)
les deux problèmes disparaissent et il n'y a pas de ValueError.
Est-ce que quelqu'un a une idée de ce qui se passe? Le module d'animation est-il incapable de gérer les lignes en pointillés?