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