Animaties

Hoewel een grafiek heel handig kan zijn om een simulatie te visualiseren is het soms inzichtelijker een animatie te maken. Python biedt je de mogelijkheid om een figuur steeds opnieuw te tekenen. Dat geeft je verschillende mogelijkheden om een beweging aan te geven. We bouwen hier een kort voorbeeld, waarin we een lijn (en punt) volgens over het scherm laten bewegen. We bouwen de functie op in 3 stappen waarbij we telkens 1 element toevoegen. Met behulp van deze functionaliteit kun je een groot scala aan animaties maken.

Een bewegend stipje

Als je een punt tekent (één -waarde en één -waarde) waarvan je en steeds verandert dan lijkt het of het punt over het scherm beweegt. In de code hieronder nemen we steeds stapjes in , rekenen uit en tekenen het punt op het scherm. We gebruiken ook de commando’s xlim en ylim om in de plot aan te geven welke -waardes en -waardes we willen zien.

import math
import numpy as np
import matplotlib.pyplot as plt

# neem kleine stappen in x tussen 0 en 2pi
for x in np.arange(0,2 * math.pi, 0.05):

    y = math.sin(x)

    # plot grafiek
    plt.plot(x, y, 'bo', markersize = 10)  # blauwe punt
    plt.xlim(0,2 * math.pi)
    plt.ylim(-1, 1)
    plt.draw()           # update grafiek
    plt.pause(0.001)
    plt.clf()            # clear grafiek

Je ziet dat we in de code de functie pause() aanroepen. Dat doen we om pyplot de gelegenheid te geven de nieuwe figuur op het scherm te tekenen. Dit wordt alleen gedaan tijdens de pauzes die we geven.

Een bewegende lijn

Een grafiek tekenen we met behulp van lijsten: een lijst met -waardes en een lijst met -waardes. Als je die lijsten steeds uitbreidt dan krijg je het onderstaande effect: de functie getekend met een rode lijn.

import math
import numpy as np
import matplotlib.pyplot as plt

L_x = []
L_y = []

# take small steps in x
for x in np.arange(0,2 * math.pi, 0.05):

    y = math.sin(x)

    L_x.append(x)
    L_y.append(y)

    # plot grafiek
    plt.plot(L_x, L_y, 'r-')   # rode lijn
    plt.xlim(0,2 * math.pi)
    plt.ylim(-1, 1)
    plt.draw()           # update grafiek
    plt.pause(0.001)
    plt.clf()            # clear grafiek

Zoals je ziet is de code maar drie regels veranderd ten opzichte van voorbeeld 1. Het resultaat ziet er als volgt uit:

Een stip, een lijn en tekst

Je kan de stip en de lijn ook tegelijk tekenen en op het scherm ook informatie weergeven over de positie van het punt op het scherm.

import math
import numpy as np
import matplotlib.pyplot as plt

L_x = []
L_y = []

# take small steps in x
for x in np.arange(0,2*math.pi,0.05):

    y = math.sin(x)

    L_x.append(x)
    L_y.append(y)

    # plot grafiek
    plt.plot(L_x, L_y, 'r-')               # rode lijn
    plt.plot(x, y, 'bo', markersize = 10)  # blauwe stip
    plt.xlim(0,2 * math.pi)
    plt.ylim(-1,1)

    # text op scherm      
    plt.text( 0.25, -0.8, "(%.2f,%.2f)" % (x,y) )  

    plt.draw()           # update grafiek
    plt.pause(0.001)
    plt.clf()            # clear grafiek