Animation avec PyLab

Vous découvrirez ici comment créer une animation avec PyLab et matplotlib.

Animation avec effacement

Animation avec le module animation de matplotlib

Le module animation est disponible à partir de la version 1.1 de Matplolib.

Nous allons utiliser la fonction FuncAnimation() du module animation.

Dans notre script, nous allons définir une fonction init() et une fonction animate(). La fonction init() servira à créer l’arrière de l’animation qui sera présent sur chaque image. La fonction animate() met à jour la courbe pour chaque image.

from pylab import *
from matplotlib import animation

k = 2*pi
w = 2*pi
dt = 0.01

xmin = 0
xmax = 3
nbx = 100

x = linspace(xmin, xmax, nbx)

fig = figure() # initialise la figure
line, = plot([],[]) 
xlim(xmin, xmax)
ylim(-1,1)

# fonction à définir quand blit=True
# crée l'arrière de l'animation qui sera présent sur chaque image
def init():
    line.set_data([],[])
    return line,

def animate(i): 
    t = i * dt
    y = cos(k*x - w*t)
    line.set_data(x, y)
    return line,
 
ani = animation.FuncAnimation(fig, animate, init_func=init, frames=100, blit=True, interval=20, repeat=False)

show()

La fonction FuncAnimation() dispose d’un argument avec une étiquette appelée interval, qui est le temps en millisecondes entre deux appels de la fonction de mise à jour, ici animate().

Animation sans le module animation

Nous présentons ici la méthode qui était utilisée avant le développement du module animation.

from pylab import *

ion() # mode interaction on

x = linspace(0, 3, 100)
k = 2*pi
w = 2*pi
dt = 0.01

# courbe initiale
t = 0
y = cos(k*x - w*t)
line, = plot(x, y) # une reference a la courbe est mise dans line

# courbe en mouvement
for i in range(50):
    t = t + dt
    y = cos(k*x - w*t)
    line.set_ydata(y) # modifie les valeurs de y
    draw() # force le dessin de la figure

ioff() # mode interaction off
show()

Animation sans effacement

from pylab import *

ion() # mode interaction on

x = linspace(0, 3, 100)
k = 2*pi
w = 2*pi
dt = 0.01

# courbe initiale
t = 0
y = cos(k*x - w*t)
line, = plot(x, y) # une reference a la courbe est mise dans line

# courbe en mouvement
for i in range(50):
    t = t + dt
    y = cos(k*x - w*t)
    line.set_ydata(y) # modifie les valeurs de y
    draw() # force le dessin de la figure
    pause(0.05)

ioff() # mode interaction off
show()