Sommaire
Matplotlib est une bibliothèque pour Python orientée sur la visualisation de données.
Installation de la bibliothèque
Matplotlib est installée par défaut avec la plupart des distributions Python (comme Anaconda). Elle peut cependant être installé sur Python par l’une des commandes suivantes (dépendant de votre distribution) :
pip install matplotlib conda install matploblib
Importation de la bibliothèque
Afin de pouvoir utiliser la bibliothèque Matplotlib dans vos scripts sous Python, et plus particulièrement le module pyplot – pour l’affichage de courbes – , il est indispensable de l’importer dans votre programme :
from matplotlib import pyplot as plt
Bases de la création d’un graphique avec pyplot
Courbe simple y = f(x)
Nous allons d’abord voir comment créer simplement un graphique 2D avec deux listes (sans paramètres changeant l’esthétisme et la lecture du graphique). Le module pyplot supporte notamment les listes natives de Python et les vecteurs ou matrices provenant de la bibliothèque Numpy comme données d’entrée pour l’affichage.
x = [0,1,2,3,4,5] y = [10,19,5,12,14,11]
Pour créer le graphique à partir de ce jeu de données dans une nouvelle fenêtre, il faut au préalable ouvrir une nouvelle figure (par la commande figure de pyplot) puis faire appel à la fonction plot qui permet d’afficher un vecteur y en fonction d’un vecteur x. Nous verrons plus tard qu’il existe d’autres possibilités de graphiques qui font appel à des fonctions différentes du module pyplot.
plt.figure() # Initialise la figure plt.plot(x,y) # Réalise le tracé, x et y doivent ABSOLUMENT avoir la même taille # Si x et y ne sont pas de même dimension, Python génère une erreur : x and y must have same first dimension
Selon l’environnement de développement que vous utilisez (et sa configuration), les figures peuvent s’afficher directement dans la même fenêtre, dans une autre fenêtre ou pas du tout. Il est conseillé, surtout dans le dernier cas, d’utiliser la commande show de pyplot pour forcer l’affichage de la figure.
plt.show() #Affiche le graphique
Axes, titre, légende…
Toute représentation graphique, et plus particulièrement en science, doit être compréhensible sans autre support et doit donc comporter des renseignements permettant d’informer le lecteur des éléments qui sont présentées dans chacune des figures.
Une figure pertinente doit donc contenir :
- un titre global ;
- des axes gradués et portant le nom et les unités des grandeurs qu’ils représentent ;
- une légende de toutes les courbes présentes sur la figure.
Elle doit également être suffisamment lisible et donc avoir une taille adaptée.
Taille de la figure
La taille de la figure peut être modifiée grâce à la fonction figure qui prend comme paramètres la largeur et la hauteur souhaitées en pouces. Dans l’exemple suivant par exemple on force la figure à faire une taille de 15 x 10 pouces :
plt.figure(figsize = (15,10)) plt.plot(x,y)
Titre de la figure
Le titre s’ajoute grâce à la fonction title du module pyplot.
plt.title("Un graphique qui commence à être un graphique")
Légende des axes
Les légendes sur les axes se font avec :
- la fonction xlabel pour l’axe horizontal
- la fonciton ylabel pour l’axe vertical
plt.xlabel("Axe des abscisses (unité)") plt.ylabel("Axe des ordonnées (unité)") plt.show()
Ajout de plusieurs données sur un même graphique
On peut tracer plusieurs courbes dans une même figure avec pyplot.
Pour pouvoir s’y retrouver, il va falloir utiliser des labels en argument des différents appels à la fonction plot afin de bien reconnaître les fonctions tracées.
Dans cet exemple, nous utiliserons des vecteurs générés à l’aide de la bibliothèque Numpy.
import numpy as np x = np.linspace(-10,10,1000) # vecteurs de 1000 éléments allant de -10 à 10 y1 = np.cos(x) y2 = np.sin(x)
Il faut ensuite créer une nouvelle figure et placer chacune des courbes y1 et y2 dépendant chacune du même vecteur x. L’option label de la fonction plot permet d’ajouter une légende à la courbe ajoutée dans la figure.
Par défaut, pyplot modifie la couleur de chacune des courbes ajoutées dans une figure. Une autre option, nommée linestyle, permet de modifier également le type de ligne associée à la courbe. Il est également possible de modifier soi-même la couleur d’une courbe avec l’option color.
plt.figure(figsize = (15,10)) plt.plot(x,y1,label = "Cosinus") plt.plot(x,y2,label = "Sinus", linestyle = "dashed", color="r") # Linestyle modifie l'apparence du tracé / Color modifie la couleur du tracé plt.xlabel("Axe des abscisses (unité)")
La fonction legend de pyplot permet d’ajouter un encadré sur la figure portant les labels associés à la couleur et au type de ligne de chacune des courbes présentes sur la figure. Si les labels n’ont pas été ajoutés lors de l’appel à la fonction plot, il est possible de passer en argument de la fonction legend autant de labels que de courbes présentes dans la figure dans l’ordre d’ajout des courbes.
plt.legend() # Ligne à ajouter pour afficher les labels des plt.plot() plt.title("Un graphique avec des couleurs") plt.show()
Grilles
Echelles logarithmiques
plt.yscale("log")
Tracé avec incertitudes
Nous allons désormais ajouter à nos graphiques ce que tout expérimentateur adore : des barres d’incertitudes !
Nous nous appuierons sur des données provenant d’un travail expérimental autour de l’interféromètre de Michelson (voir TP LEnsE – Semestre 5 ).
(détail des différents vecteurs…)
n_anneaux = np.array([1,2,3,4,5,6,7,8,9,10]) dist = np.array([25.77,25.92,26.33,26.67,27.00,27.58,28.04,28.36,28.75,29.09])*10**(-3)-25.425*10**(-3) # Les incertitudes doivent bien sûr avoir la même dimension que les données ! in_n_anneaux = [0.5]*10 # Incertitude sur n_anneaux / génération d'un vecteur de 10 valeurs in_dist = [0.005*10**(-3)]*10 # Incertitude sur dist
Une fois que les données sont prêtes à être affichées, on peut créer une nouvelle figure. Nous allons ici utiliser la fonction errorbar du module pyplot qui permet d’ajouter des barres d’erreur sur les différents points de mesure.
fig = plt.figure(figsize=(15,10)) # plt.errorbar(x,y,xerr=incertitude_abscisses,yerr=incertitude_ordonnée) # linestyle nous permet de changer l'allure de la courbe, ici on la rend invisible comme on veut des points plt.errorbar(dist, n_anneaux, xerr=in_dist, yerr=in_n_anneaux, linestyle="none", label="Données brutes") plt.legend() plt.ylabel("Nombre d'anneaux") plt.xlabel("Épaisseur e en m") plt.title("Nombre d'anneaux en fonction de l'épaisseur") plt.show()
Sauvegarde d’un graphique
A modifier : plt.savefig(“Titre du fichier du graphique complet”)
Ce tutoriel a été co-écrit par Corentin LE PENDU (promo 2024) dans le cadre d’une semaine spécifique.