Aide-mémoire : les graphiques

Tracer avec matplotlib, afficher des images, documenter son code

tracer des graphiques légender et configurer images et sous-graphiques documenter son code pièges fréquents

Importer et tracer une courbe

On importe matplotlib.pyplot sous le surnom plt - c'est la convention universelle. La fonction plot() trace une courbe et show() ouvre la fenêtre d'affichage.

import matplotlib.pyplot as plt hauteurs = [12, 18, 9, 22, 15] plt.plot(hauteurs) plt.show()

Par convention on importe pyplot sous le nom plt - tous les exemples en ligne et dans les cours utilisent ce raccourci. show() affiche la fenêtre : sans lui, rien ne s'affiche.

Barres et nuage de points

Chaque type de graphique a sa fonction. Le choix dépend de ce qu'on veut montrer : comparer des catégories ou explorer la relation entre deux variables.

Graphique en barres

plt.bar(categories, valeurs)

especes = ["erable", "pin", "chene"] nombres = [42, 17, 28] plt.bar(especes, nombres) plt.show() # comparer des categories

La liste des catégories vient en premier, puis la liste des valeurs. Les deux listes doivent avoir la même longueur.

Nuage de points

plt.scatter(axe-x, axe-y)

largeurs = [2.1, 3.4, 1.8, 4.0] hauteurs = [12, 18, 9, 22] plt.scatter(largeurs, hauteurs) plt.show() # relation entre deux variables

scatter place un point pour chaque paire (x, y). Idéal pour voir si deux mesures sont corrélées : plus la largeur est grande, plus la hauteur l'est aussi ?

Légender un graphique

Un graphique sans titre ni étiquettes d'axes n'est pas lisible. Ces fonctions s'appellent avant plt.show().

On écritEffetRègle
plt.title("...") titre du graphique toujours présent
plt.xlabel("...") étiquette de l'axe horizontal indiquer l'unité
plt.ylabel("...") étiquette de l'axe vertical indiquer l'unité
plt.legend() affiche la légende des courbes utile si plusieurs courbes
plt.grid(True) ajoute un quadrillage facilite la lecture

Règle d'or : tout graphique doit avoir un titre, les deux axes nommés, et l'unité de mesure. Sans ça, le lecteur ne sait pas ce qu'il regarde.

Afficher une image - deux méthodes

matplotlib peut afficher des images directement. Pour plus de formats et plus de contrôle (redimensionner, recadrer, pivoter), on combine avec PIL (la bibliothèque Pillow).

Méthode 1 - matplotlib seul

plt.imread() + plt.imshow()

photo = plt.imread("erable.png") plt.imshow(photo) plt.axis("off") plt.show()

plt.imread lit l'image comme un tableau 2D de pixels (chaque pixel = trois nombres : rouge, vert, bleu). Simple, mais limité aux formats courants (PNG, JPG).

Méthode 2 - avec PIL (Pillow)

from PIL import Image

from PIL import Image photo = Image.open("erable.png") plt.imshow(photo) plt.axis("off") plt.show()

PIL ouvre plus de formats et permet de manipuler l'image avant de l'afficher : redimensionner, recadrer, pivoter. plt.axis("off") enlève la règle graduée qui parasite la photo.

Plusieurs images dans une figure - les sous-graphiques

plt.subplots(lignes, colonnes) divise la figure en cases. On reçoit la figure et un tableau de sous-graphiques qu'on peut parcourir avec une boucle for.

from PIL import Image fichiers = ["erable.png", "pin.png", "chene.png"] figure, sousGraphiques = plt.subplots(1, 3) for sousGraphique, fichier in zip(sousGraphiques, fichiers): sousGraphique.imshow(Image.open(fichier)) sousGraphique.axis("off") sousGraphique.set_title(fichier) plt.show()

plt.subplots(1, 3) crée 1 ligne et 3 colonnes. zip() associe chaque sous-graphique à son fichier image. On appelle les méthodes directement sur sousGraphique (pas sur plt).

Documenter son code

Un code bien documenté explique le pourquoi, pas seulement le quoi. Deux outils : le commentaire # pour une ligne, la docstring pour décrire une fonction entière.

Le commentaire avec #

# explication sur une ligne

hauteurs = [12, 18, 9] # on divise par 100 pour convertir cm en metres hauteursMetre = [hauteur / 100 for hauteur in hauteurs]

Le commentaire explique le pourquoi d'un choix. Inutile d'écrire # on additionne sous un + : ça ne dit rien de plus que le code lui-même.

La docstring d'une fonction

"""Description entre guillemets triples"""

def aireParcelle(largeur, hauteur): """Retourne l'aire d'une parcelle, en metres carres.""" return largeur * hauteur help(aireParcelle) # affiche la docstring

La docstring se place juste après la ligne def, entre guillemets triples. help() l'affiche à la demande - c'est comme ça que fonctionne la documentation de Python lui-même.

Les pièges qui font perdre du temps

Quatre erreurs très fréquentes avec matplotlib.

Oublier plt.show()

plt.plot(hauteurs) # rien ne s'affiche sans show() plt.plot(hauteurs) plt.show() # la fenetre apparait

Sans plt.show(), le graphique est préparé en mémoire mais n'est jamais affiché. On attend... pour rien.

Courbes qui se superposent

plt.plot(serie1) plt.plot(serie2) # les deux sur la meme figure # solution : effacer entre les deux plt.clf() # ou plt.figure() pour une nouvelle

Si on trace deux graphiques de suite sans plt.clf() ni plt.figure(), matplotlib ajoute les courbes sur la même figure.

Confondre plot et scatter

plt.plot(x, y) # courbe : points RELIES plt.scatter(x, y) # nuage : points SEPARES

plot relie les points avec une ligne - utile pour une évolution dans le temps. scatter pose des points isolés - utile pour comparer deux mesures.

Oublier plt.axis("off") sur une image

plt.imshow(photo) # sans axis("off") : regle graduee visible plt.axis("off") # cache la regle plt.show()

Sans plt.axis("off"), matplotlib affiche les axes chiffrés (numéros de pixels) autour de la photo, ce qui est rarement souhaitable.