[PYTHON] Animation avec matplotlib

Animation de rotation avec matplotlib

introduction

matplotlib peut non seulement créer des graphiques, mais aussi des animations. Les principales fonctions de l'animation sont ArtistAnimation et FuncAnimation, mais ici, FuncAnimation est utilisé pour afficher l'animation de rotation comme indiqué ci-dessous.

Commentaire

Importation de module

import.py


import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle
import matplotlib.animation as animation
from IPython.display import HTML

Créer des diagrammes et afficher des cercles

makefig.py



fig, ax = plt.subplots(figsize=(6,6))

#plot circle
c1 = Circle((0, 0), 5,color='0.75')
ax.add_patch(c1)
c2 = Circle((0, 0), 4.5,color='0.7')
ax.add_patch(c2)
c3 = Circle((0, 0), 4,color='0.65')
ax.add_patch(c3)
c4 = Circle((0, 0), 3.5,color='0.6')
ax.add_patch(c4)
c5 = Circle((0, 0), 3,color='0.55')
ax.add_patch(c5)
c6 = Circle((0, 0), 2.5,color='0.5')
ax.add_patch(c6)
c7 = Circle((0, 0), 2,color='0.45')
ax.add_patch(c7)
c8 = Circle((0, 0), 1.5,color='0.4')
ax.add_patch(c8)
c9 = Circle((0, 0), 1,color='0.35')
ax.add_patch(c9)

Créez une figue avec des plt.subplots et affichez 9 cercles avec Circle.

Paramètres de déplacement du cercle

param.py


def f(a,t):
    return np.cos(a*t)

def g(b,t,sig):
    return np.sin(b*t+sig)

t = np.linspace(0,2*np.pi,200)
sig = np.pi/4

x=f(3,t)
y=g(2,t,sig)
x1 = np.hstack([x,np.ones(8)])
y1 = np.hstack([y,np.ones(8)*np.sin(sig)])
x2 = np.hstack([np.ones(1),x,np.ones(7)])
y2 = np.hstack([np.ones(1)*np.sin(sig),y,np.ones(7)*np.sin(sig)])
x3 = np.hstack([np.ones(2),x,np.ones(6)])
y3 = np.hstack([np.ones(2)*np.sin(sig),y,np.ones(6)*np.sin(sig)])
x4 = np.hstack([np.ones(3),x,np.ones(5)])
y4 = np.hstack([np.ones(3)*np.sin(sig),y,np.ones(5)*np.sin(sig)])
x5 = np.hstack([np.ones(4),x,np.ones(4)])
y5 = np.hstack([np.ones(4)*np.sin(sig),y,np.ones(4)*np.sin(sig)])
x6 = np.hstack([np.ones(5),x,np.ones(3)])
y6 = np.hstack([np.ones(5)*np.sin(sig),y,np.ones(3)*np.sin(sig)])
x7 = np.hstack([np.ones(6),x,np.ones(2)])
y7 = np.hstack([np.ones(6)*np.sin(sig),y,np.ones(2)*np.sin(sig)])
x8 = np.hstack([np.ones(7),x,np.ones(1)])
y8 = np.hstack([np.ones(7)*np.sin(sig),y,np.ones(1)*np.sin(sig)])
x9 = np.hstack([np.ones(8),x])
y9 = np.hstack([np.ones(8)*np.sin(sig),y])

Le cercle se déplace le long de la courbe de Lisaju. Utilisez np.hstack etc. pour déplacer petit à petit le mouvement de chaque cercle.

Réglage de la plage d'affichage

xlimylim.py


xmin, xmax = xlim = x.min()-5, x.max()+5
ymin, ymax = ylim = y.min()-5, y.max()+5
ax.set(xlim=xlim, ylim=ylim, autoscale_on=False)
ax.set_aspect('equal')
ax.axis('off')

Paramètres d'animation, sauvegardes, marquages

xlimylim.py


def init():   
    return c1, c2, c3, c4, c5, c6, c7,c8,c9,

def update(num):
    c1.set_center([x1[num],y1[num]])
    c2.set_center([x2[num],y2[num]])
    c3.set_center([x3[num],y3[num]])
    c4.set_center([x4[num],y4[num]])
    c5.set_center([x5[num],y5[num]])
    c6.set_center([x6[num],y6[num]])
    c7.set_center([x7[num],y7[num]])
    c8.set_center([x8[num],y8[num]])
    c9.set_center([x9[num],y9[num]])
    
    return c1, c2, c3, c4, c5, c6, c7,c8,c9

ani = animation.FuncAnimation(fig, update, init_func=init,interval = 20, frames = 208)
ani.save('Tunnel_animation.mp4', writer="ffmpeg",dpi=100)
HTML(ani.to_html5_video())

init est le premier processus à être exécuté lorsque l'animation est exécutée, et comme rien n'est fait ici, seul le cercle est retourné. La mise à jour étant une fonction exécutée pour l'animation, chaque cercle est déplacé par set_center.

animation.FuncAnimation () vous permet de spécifier l'intervalle entre les chiffres. L'unité est la ms. Dans les cadres, vous pouvez définir le nombre d'exécutions de la fonction de mise à jour.

Vous pouvez enregistrer l'animation à la résolution spécifiée avec ani.save ('filename.mp4', writer = "ffmpeg", dpi = 100). Si ffmpeg n'est pas inclus

ffmpeg.py


conda install -c conda-forge ffmpeg

Mettons-le dedans. Vous pouvez afficher des animations dans jupyterlab et notebook avec HTML (ani.to_html5_video ()).

référence

https://discourse.matplotlib.org/t/tunnel-animation/20733

Publicité

J'ai écrit des articles sur diverses animations matplotlib sur Blog. Veuillez voir si vous êtes intéressé.

https://sabopy.com/category/py/matplotlib-animation/

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
Méthode de dessin graphique avec matplotlib
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
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 ♬
Comment titrer plusieurs figures avec matplotlib
[Python] Définissez la plage du graphique avec matplotlib
Ajustez l'espacement entre les chiffres 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
Définissez la couleur des xticklabels individuellement avec matplotlib
[Python] Rendons matplotlib compatible avec le japonais
Graphiques de fonctions triangulaires avec numpy et matplotlib
Résumé matplotlib
Afficher les marqueurs au-dessus de la bordure avec matplotlib
Créer une animation GIF avec surveillance des dossiers