Visualisation de trajectoires

Depuis le début de ce cours, les affichages de nos scripts Python se résument à du texte. Mais heureusement, il existe des modules qui permettent d'enrichir le langage Python. Nous allons nous focaliser dans ce chapitre sur la découverte d'un module de génération de graphiques.

Le module matplotlib

Un module vient compléter le jeu d'instructions de base du langage Python. Il doit donc être installé avant d'être utilisé. La commande sous Windows est la suivante :

python.exe -m pip install matplotlib

Et sous macOS

python3 -m pip install matplotlib

Attention !

Cette commande doit être exécutée en mode administrateur. Sous Windows, dans le menu Démarrer, clic droit sur l'application "invite de commandes" et choisir "exécuter en tant qu'administrateur".

Le module matplotlib permet de générer une grande variété de graphiques mais nous nous limiterons pour le moment au tracé de trajectoires.

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5, 6]
y = [0, 1, 0, 1, 0, 1, 0] 
plt.plot(x, y)
plt.show()
exemple de graphique
Un exemple de graphique simple

Je vous recommande la lecture du chapitre Tracé de courbes du site CoursPython. Il regorge d'explications sur les fonctions qui permettent de personnaliser un graphique.

Exercice

Écrivez un script plotcsv.py qui charge le fichier data.csv afin de générer le graphique ci-dessous.

Trajectoire du ballon
Correction
import matplotlib.pyplot as plt

# Liste des positions successives
px = []
py = []

datafile = open("data.csv", "r")

# Lit la première ligne du fichier (entête de colonnes)
# pour avancer jusqu'à la ligne 2
line = datafile.readline()

while True:
    # Lecture d'une nouvelle ligne dans le fichier
    line = datafile.readline()

    # Si la ligne est vide, la fin du fichier a été atteinte
    if line == '':
        break

    value = line.split(';')
    px.append(float(value[1]))
    py.append(float(value[2]))

datafile.close()

plt.plot(px, py, label="ballon")
plt.plot([0,15],[0,0], label="sol")
plt.legend()
plt.xlabel("x")
plt.ylabel("y")
plt.show()

Vive le vent, vive le vent, ...

Pour clore ce chapitre sur la génération de graphiques, et en attendant la neige, je vous propose de créer un script Python qui génère une courbe de Von Koch.

Exercice

Écrivez un script vonkoch.py qui affiche une courbe de Von Koch après plusieurs itérations.

Courbe de Von Koch
Courbe de Von Koch après une itération
Courbe de Von Koch
Courbe de Von Koch après deux itérations
Courbe de Von Koch
Courbe de Von Koch après cinq itérations
Correction
from math import *
import matplotlib.pyplot as plt

x = [0, 1]
y = [0, 0]

iterations = 5
for i in range(1,iterations+1):
    nx = [ x[0] ]
    ny = [ y[0] ]
    for j in range(0,len(x)-1):
        dx = (x[j+1]-x[j])/3
        dy = (y[j+1]-y[j])/3

        p1x = x[j]+dx
        p1y = y[j]+dy
        nx.append(p1x)
        ny.append(p1y)

        p2x = p1x + cos(pi/3)*dx - sin(pi/3)*dy
        p2y = p1y + sin(pi/3)*dx + cos(pi/3)*dy
        nx.append(p2x)
        ny.append(p2y)

        p3x = x[j] + 2*dx
        p3y = y[j] + 2*dy
        nx.append(p3x)
        ny.append(p3y)

        p4x = x[j] + 3*dx
        p4y = y[j] + 3*dy
        nx.append(p4x)
        ny.append(p4y)

    x = nx
    y = ny

plt.plot(x, y)
plt.axis("equal")
plt.xlim(0,1)
plt.ylim(-0.2,0.6)
plt.show()