[PYTHON] Animation avec matplotlib

Aperçu

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.

Créer une animation

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.

Modèle de création

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()

Modèle de mise à jour des données

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()

Enregistrez et partagez des animations

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())

note de bas de page

[^ 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

Animation avec matplotlib
Animation avec matplotlib
Créer une animation de tracé avec Python + Matplotlib
Japonais avec matplotlib
histogramme avec matplotlib
Faire une animation avec matplotlib
Animation facile avec matplotlib (mp4, gif)
Graphique 2 axes avec Matplotlib
Carte thermique par Python + matplotlib
Graphique de bande avec matplotlib
Apprenez avec Chemo Informatics Matplotlib
Dessin en temps réel avec matplotlib
Différentes barres de couleurs avec Matplotlib
Graphique 3D avec matplotlib
Ajustez les axes avec matplotlib
La base de la théorie des graphes avec l'animation matplotlib
Graphique des données Excel avec matplotlib (1)
Essayez d'utiliser matplotlib avec PyCharm
Animation de l'équation de diffusion avec NumPy
Dessinez une animation de flux semblable à la Terre avec matplotlib et cartopy
Graphique des données Excel avec matplotlib (2)
Bar plot empilable avec matplotlib
Sélectionnez les couleurs en dégradé avec matplotlib
Tri à bulles avec animation moelleuse
Animer plusieurs graphiques avec matplotlib
Créer une animation gif à partir d'un fichier de numéro de série avec matplotlib
Visualisez l'écoulement de la cavité avec matplotlib et enregistrez-le en tant qu'animation gif
Manuel de graphisme Python avec Matplotlib.
Affichage des inférences et des résultats avec Tensorflow + matplotlib
Japaneseize Matplotlib avec Alpine en utilisant Docker
[IOS] Démontez l'animation GIF avec Pythonista3.
Dessinez le japonais avec matplotlib sur Ubuntu
Dessinez un graphique lâche avec matplotlib
Traçage de données polyvalent avec pandas + matplotlib
Heatmap avec dendrogramme en Python + matplotlib
Réglage facile de la police japonaise avec matplotlib
Dessinez facilement des graphiques avec matplotlib
Couleur en continu avec le diagramme de dispersion matplotlib
Dessinez Riapnov Fractal avec Python, matplotlib
Quand matplotlib ne fonctionne pas avec python2.7
Effectuer un tracé de probabilité normale logarithmique avec Python, matplotlib
Écrire un histogramme empilé avec matplotlib
Implémentez "Data Visualization Design # 2" avec matplotlib
[Introduction à Matplotlib] Axes Animation 3D: J'ai joué avec des figurines 3D Lisaju ♬
Mémorandum Matplotlib
Comment titrer plusieurs figures avec matplotlib
[Python] Définissez la plage du graphique avec matplotlib
Ajustez l'espacement entre les chiffres avec Matplotlib
Alignez la taille de la barre de couleurs avec matplotlib
Création d'animation flexible à l'aide de l'animation.FuncAnimation de matplotlib
Galerie Matplotlib
Essayez de dessiner une distribution normale avec matplotlib
Mémo Matplotlib
Faire une figure partiellement zoomée avec matplotlib
Ecrire des graphiques SVG avec matplotlib avec heroku
Afficher le graphique japonais avec VS Code + matplotlib
Carte thermique pour la recherche de grille avec Matplotlib
Définissez la couleur des xticklabels individuellement avec matplotlib
Dessinez une étiquette d'axe hiérarchique avec matplotlib + pandas
[Python] Rendons matplotlib compatible avec le japonais