Vous pouvez facilement créer de beaux graphiques en utilisant matplotlib de python. La fonction de création d'animation graphique est également fournie en standard dans matplotlib, voici donc un résumé complet de son utilisation.
Deux méthodes principales sont proposées:
--Animation en passant une liste d'objets graphiques pré-créés (ArtistAnimation) --Définir une fonction pour mettre à jour le graphique et l'animer (FuncAnimation)
La raison du premier est l'animation d'artiste, car matplotlib appelle les objets graphiques des artistes. Nous utiliserons également ce nom ici. Si vous avez besoin de performances, ou si vous avez besoin de changer le titre ou le contrôle fin de l'animation, vous devez choisir ce dernier.
Introduisons chacun avec un exemple de code.
ArtistAnimation
Passer à ArtistAnimation est une liste d'artistes [^ 1]. Si chaque image de l'animation est représentée par l'image 1, l'image 2, ...,
[
[
Artiste affiché dans l'image 1_1,Artiste affiché dans l'image 1_2, ...
],
[
Artiste affiché dans l'image 2_1,Artiste affiché dans l'image 2_2, ...
],
...
]
Ce sera. Notez que certains types et fonctions de graphes matplotlib renvoient un artiste et d'autres une liste d'artistes. Par exemple, l'exemple suivant ajoute simplement la liste des artistes renvoyés par la fonction de tracé.
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
import numpy as np
fig, ax = plt.subplots()
artists = []
x = np.arange(10)
for i in range(10):
y = np.random.rand(10)
im = ax.plot(x, y)
artists.append(im)
anim = ArtistAnimation(fig, artists, interval=1000)
fig.show()
Pour les fonctions qui renvoient un artiste, telles que scatter, ajoutez celle encapsulée dans la liste.
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
import numpy as np
fig, ax = plt.subplots()
artists = []
x = np.arange(10)
for i in range(10):
y = np.random.rand(10)
im = ax.scatter(x, y)
artists.append([im])
anim = ArtistAnimation(fig, artists, interval=1000)
fig.show()
FuncAnimation
Une fonction est appelée pour chaque image de l'animation. Il peut y avoir deux modèles de traitement:
--Créez un nouvel artiste à chaque fois (vous devez conserver l'artiste précédemment créé et le supprimer explicitement) --Mettre à jour les données d'artiste créées
Je vais vous présenter chaque code.
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
fig, ax = plt.subplots()
ims = []
x = np.arange(10)
ax.set_xlim(0, 9)
ax.set_ylim(0, 1)
def update_anim(i):
y = np.random.rand(10)
if len(ims) > 0:
im = ims.pop()
im.remove()
im, = ax.plot(x, y)
ims.append(im)
anim = FuncAnimation(fig, update_anim, interval=1000)
fig.show()
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
fig, ax = plt.subplots()
artists = []
im, = ax.plot([], [])
x = np.arange(10)
ax.set_xlim(0, 9)
ax.set_ylim(0, 1)
def update_anim(frame):
y = np.random.rand(10)
im.set_data(x, y)
anim = FuncAnimation(fig, update_anim, blit=False)
fig.show()
Bien entendu, la mise à jour des données est plus efficace.
blit=True
De plus, si vous spécifiez l'argument optionnel "blit" sur True, il semble que vous puissiez accélérer le dessin en utilisant la technique appelée "blitting" utilisée en infographie. Dans ce cas, il est nécessaire de renvoyer la liste des artistes à découper à partir de la fonction.
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
fig, ax = plt.subplots()
artists = []
im, = ax.plot([], [])
x = np.arange(10)
ax.set_xlim(0, 9)
ax.set_ylim(0, 1)
def update_anim(frame):
y = np.random.rand(10)
im.set_data(x, y)
return im,
anim = FuncAnimation(fig, update_anim, blit=True)
fig.show()
L'animation créée peut être enregistrée dans un fichier comme suit.
Exporter au format gif
anim.save('anim.gif', writer='imagemagick', fps=4)
Exporter vers mp4
anim.save('anim.mp4', writer='ffmpeg', fps=4)
De plus, lorsque vous travaillez sur un notebook Jupyter, vous pouvez spécifier % matplotlib nbagg
au lieu de% matplotlib inline
pour afficher un graphique avec lequel l'utilisateur peut interagir en ligne. L'animation est également réalisée. Cependant, il est lourd et ne sera pas affiché dans nbviewer, donc si vous souhaitez simplement l'afficher en ligne, il est recommandé d'intégrer la vidéo comme suit.
from IPython.display import HTML
HTML(anim.to_html5_video())
[^ 1]: Généralement, objets itérables qui peuvent être bouclés avec for. Ici, cela s'appelle une liste dans un sens général.
Recommended Posts