** Ce que vous pouvez faire en lisant cet article **
Matplotlib peut créer une animation gif à partir de fichiers de données de numéro de série
Je peux maintenant faire des vidéos avec gnuplot (Créer des vidéos à partir des données du numéro de série avec gnuplot), mais je veux quand même pouvoir faire des vidéos avec matplotlib. !!
--Environnement - macOS mojave 10.14.6 - Python 3.7.5
Tout d'abord, animons la courbe sinusoïdale comme une pratique. La méthode de base pour créer une animation gif est décrite en détail dans l'article suivant.
Voici une référence pour les paramètres de base. Animation facile avec matplotlib (mp4, gif)
La méthode de dessin est brièvement écrite ici et est facile à comprendre. Créer une animation avec matplotlib
gif_anime.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
ax = fig.add_subplot(111)
#Liste pour mettre l'objet Line2D
ims = []
for i in range(10):
x = np.array(range(60))
Y = np.sin(x/5 - i * 5)
im = ax.plot(Y, color='blue')
ims.append(im) #Ajouter chaque image de cadre aux ims
#Génération d'animation
ani = animation.ArtistAnimation(fig, ims, interval=100, blit=True, repeat_delay=1000)
#sauvegarder
ani.save("sample.gif", writer="pillow")
#afficher
plt.show()
Vous pouvez créer une animation gif comme celle-ci (si cela ne fonctionne pas, cliquez dessus pour l'ouvrir dans une autre fenêtre. Lorsque je l'ai téléchargé sur Qiita, il a cessé de tourner à l'infini, mais si je le fais à portée de main, il bouclera à l'infini).
Des options telles que ʻinterbal`` repeat_delay` sont détaillées dans l'article suivant. Créer une animation graphique (Matplotlib) avec Python (ArtistAnimation)
Ensuite, essayons ** "animer le fichier du numéro de série du résultat du calcul" ** tel qu'utilisé dans la présentation de la recherche. Ce serait facile si je pouvais dessiner l'animation que j'ai mentionnée plus tôt. Tout ce que vous avez à faire est de changer la partie pour du code ci-dessus pour lire le résultat du calcul.
anime_gif2.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib.cm as cm
fig = plt.figure()
ax = fig.add_subplot(111)
#Liste pour mettre l'objet Line2D
ims = []
#Paramètres d'axe, etc.
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlim(0.1, 10.0)
ax.set_ylim(1, 5000)
#Nombre de fichiers de résultats de calcul
filenum = 10
for i in range(filenum):
r, sd = np.loadtxt("./data%01d.dat" % (i), comments='#', unpack=True) #Lecture répétée de data00 à data09
im = ax.plot(r, sd, "-", color='blue', linewidth=1)
ims.append(im) #Ajouter chaque image de cadre aux ims
#Génération d'animation
ani = animation.ArtistAnimation(fig, ims, interval=500, blit=True, repeat_delay=100)
#sauvegarder
ani.save("anime.gif", writer="pillow")
#afficher
plt.show()
Cependant, dans ce cas, la liste appelée im sera préparée avant le dessin. Si le nombre de fichiers à lire augmente, et si vous souhaitez réaliser une animation 3D, le dessin devient difficile. Par conséquent, je voudrais dessiner chaque image de l'animation.
anime_gif3.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig = plt.figure()
ax = fig.add_subplot(111)
artists = []
im, = ax.plot([], [])
#Paramètres d'axe, etc.
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlim(0.1, 10.0)
ax.set_ylim(1, 5000)
#Nombre de fichiers de résultats de calcul
filenum = 10
#Appelez cette fonction à plusieurs reprises pour dessiner
#J'augmente de 1 à chaque fois que vous appelez
def update_anim(i):
r, sd = np.loadtxt("./data%01d.dat" % (i), comments='#', unpack=True) #Lecture répétée de data00 à data09
im.set_data(r, sd)
return im,
ani = FuncAnimation(fig, update_anim, interval=500, blit=True, frames = filenum, repeat_delay=100)
#sauvegarder
ani.save("anime.gif", writer="pillow")
#afficher
plt.show()
référence: Création d'animation flexible à l'aide d'animation.FuncAnimation de matplotlib
Vous pouvez maintenant dessiner de belles animations avec matplotlib.
Recommended Posts