Matplotlib
Objectifs de la section
2-7 Bibliothèque du langage qui permettent de manipuler des graphiques
Temps requis
60 minutes
Matplotlib
est une bibliothèque Python qui permet la génération de graphiques. Travailler directement avec Matplotlib
peut s'avérer complexe, c'est pourquoi nous allons utiliser le module pyplot
qui facilite plusieurs manipulations lorsque c'est opportun.
Créer un graphique simple
Commençons par créer un graphique qui affiche la fonction cosinus sur l'intervalle \([0, 4\pi]\).
Affichage de la fonction cosinus | |
---|---|
La fonction plot
trace un graphique en liant tous les points par des lignes. Quant à la fonction scatter
, elle permet de tracer des nuages de points, donc mettre un marqueur à chaque coordonnée plutôt que de tracer des lignes entre les coordonnées.
Documentation officielle de pyplot
Affichage de la fonction cosinus | |
---|---|
Les fonctions plot
et scatter
retournent un tuple composé d'un objet Figure
(que nous n'aurons pas à manipuler) et une collection d'objets Axis
. Un objet Axis
correspond aux données d'un graphique que l'on trace. On peut manipuler Axis
directement lorsqu'on ne travaille que sur un seul graphique.
Mettre en forme un graphique
Il est possible de mettre en forme tous les éléments du graphique. La figure ci-dessous illustre les différents éléments sur le graphique.

Titre du graphique
La mise en forme du titre du graphique se fait avec la fonction set_title
appelée sur l'objet Axis
. En paramètre on peut lui indiquer le titre à utiliser (sous forme de chaîne de caractères) et deux paramètres optionnels, l'un pour les couleurs et l'autre pour la localisation.
Titre des axes
La mise en forme des axes se fait avec les fonctions set_xlabel
et set_ylabel
. Ces fonctions acceptent le nom à donner à l'axe des abscisses (x) ou des ordonnées (y).
Étendu des axes
Pour changer l'étendu des axes, il faut utiliser les fonctions set_xlim
et set_ylim
. Chacune de ces fonctions accepte deux nombres : la plus petite valeur de l'axe et la plus grande. Lorsqu'elles ne sont pas appelées, mathplotlib
assigne des valeurs limites automatiquement.
Graduation des axes
Les axes sont gradués avec deux systèmes : les marques principales (major tick) et les marques secondaires (minor tick). Pour chacune des marques, il y a aussi un formateur pour déterminer comment les étiquettes de graduation sont affichées. Pour manipuler les graduations, il faut accéder aux informations de l'axe avec les propriétés xaxis
ou yaxis
de l'Axe
du graphique.
Élément graphique | Fonction |
---|---|
Graduation principale de l'axe des x | ax.xaxis.set_major_locator |
Graduation secondaire de l'axe des x | ax.xaxis.set_minor_locator |
Graduation principale de l'axe des y | ax.yaxis.set_major_locator |
Graduation secondaire de l'axe des y | ax.yaxis.set_minor_locator |
Formateur de la graduation principale de l'axe des x | ax.xaxis.set_major_formatter |
Formateur de la graduation secondaire de l'axe des x | ax.xaxis.set_minor_formatter |
Formateur de la graduation principale de l'axe des y | ax.yaxis.set_major_formatter |
Formateur de la graduation secondaire de l'axe des y | ax.yaxis.set_minor_formatter |
Changer les marques de graduations
Chaque fonction accepte un paramètre, un MultipleLocator
avec le multiple de la graduation à utiliser.
Importer MultipleLocator
Pour utiliser MultipleLocator
il faut ajouter l'instruction d'importation from matplotlib.ticker import MultipleLocator
import matplotlib.pyplot as plt
import numpy as np
# Ajouter cette directive d'importation
from matplotlib.ticker import MultipleLocator
x = np.linspace(0, 4*np.pi, 200)
y = np.cos(x)
graphe, ax = plt.subplots()
ax.plot(x, y)
# Graduation de l'axe des abscisses par bond de 5, avec des marques secondaire
# par bond de 1
ax.xaxis.set_major_locator(MultipleLocator(5))
ax.xaxis.set_minor_locator(MultipleLocator(1))
# Graduation de l'axe des ordonnées par bond de 0.5 avec des marques secondaires
# par bond de 0.25
ax.yaxis.set_major_locator(MultipleLocator(0.5))
ax.yaxis.set_minor_locator(MultipleLocator(0.25))
plt.show()
import matplotlib.pyplot as plt
import numpy as np
# Ajouter cette directive d'importation
from matplotlib.ticker import MultipleLocator
x = np.linspace(0, 4*np.pi, 200)
y = np.cos(x)
graphe, ax = plt.subplots()
ax.plot(x, y)
# Graduation de l'axe des abscisses par bond de pi, avec des marques secondaire
# par bond de pi/4
ax.xaxis.set_major_locator(MultipleLocator(np.pi))
ax.xaxis.set_minor_locator(MultipleLocator(np.pi / 4))
plt.show()
Pour modifier le formatage des champs, trois options sont disponibles :
- Remplacer le séparateur de décimal point par la virgule (uniquement pour l'affichage);
- Formater pour un affichage en pourcentage;
- Changer le nombre de décimales affichées.
Utiliser la virgule comme séparateur de décimales
Pour modifier le séparateur de décimales, il faut modifier la langue locale que Python utilise. Contrairement aux autres paramètres, cette modification s'applique pour tous les graphiques faits après l'exécution de la ligne de code.
# Ajouter cette instruction d'importation
import locale
# À placer n'importe où AVANT d'afficher le graphique
locale.setlocale(locale.LC_NUMERIC, "fr_CA")
plt.rcParams['axes.formatter.use_locale'] = True
Formater des données en pourcentage
Pour mettre des données en pourcentage, il faut utiliser un objet de type PercentFormatter
. Il accepte un paramètre optionnel : le dénominateur utilisé pour calculer le pourcentage (soit la valeur qui correspond à 100%). Si le paramètre est omis, les valeurs sont utilisées comme des pourcentages.
Il faut importer le PercentFormatter
avec l'instruction from matplotlib.ticker import PercentFormatter
.
Changer le nombre de décimales affichées
Pour changer le nombre de décimales, il faut passer à la fonction de formatage une chaîne de formatage, comme celle d'une f-string. La variable affichée (la graduation d'axe) s'appelle toujours x
.
En savoir plus
Toutes les méthodes de formattage disponibles sont présentées sur cette page de la documentation.
Grille
Pour afficher la grille du graphique, il faut utiliser la fonction grid
sur l'axe.
Paramètres de la fonction grid
Paramètre | Type de valeur | Valeur par défaut | Description |
---|---|---|---|
visible | booléen | None | Indique s'il faut afficher la grille, donc toujours mettre sa valeur à True . |
which | chaîne de caractères | major | La valeur major pour afficher la grille seulement pour les graduations principales, minor pour afficher la grille seulement pour les graduations secondaires et both pour afficher les graduations principales et secondaires. |
Styler les graphiques 😎
Plusieurs options de personnalisation des graphiques existent afin de les rendre visuellement plus intéressant ou d'y ajouter des détails.
Marqueurs
Tel que vu au début, utiliser scatter
plutôt que plot
permet de tracer un nuage de point. On peut changer les marqueurs utilisés. La page de la documentation présente toutes les options de personnalisation des marqueurs. Voici deux images tirées de la documentation qui présente les principaux marqueurs. On modifie les marqueurs avec le paramètre marker
qui existe pour les fonctions scatter
et plot
. Dans le cas de la fonction plot
, les marqueurs sont affichés en plus de lignes.
Pour contrôler la taille des marqueurs, on utilise le paramètre s
dans la fonction scatter
et le paramètre markersize
dans la fonction plot
. Attention, les deux paramètres, même s'ils ont le même effet, ne travaillent pas avec la même échelle. Les valeurs utilisées avec scatter
doivent être beaucoup plus élevées.
Lignes
Pour les lignes, il existe 4 styles de base. Il est possible, avec une syntaxe plus avancée, de décrire le style de la ligne à tracer. Vous trouverez ces détails sur cette page de la documentation. On indique le style dans le paramètre linestyle
. On peut modifier la largeur de la ligne avec le paramètre linewidth
.
Styles de ligne
Style de ligne | Chaîne de caractère |
---|---|
Continue | - (valeur par défaut) |
Tirets | -- |
Pointillée | : |
Alternance continue, pointillée | -. |
Modification de la forme de la ligne | |
---|---|
Mettre en forme la grille
La fonction grid
accepte aussi des paramètres linestyle
et linewidth
pour modifier son affichage.
Couleurs
Pour modifier la couleur d'un élément, il faut utiliser le paramètre color
qui existe pour les fonctions scatter
, plot
et grid
. La liste de toutes les couleurs supportées est la suivante. Pour la référence de l'image ou plus de couleur, consulter la documentation officielle.

Diagrammes statistiques
Diagrammes à barres
La fonction bar
permet de créer un diagramme à barres. Les deux premiers paramètres sont respectivement :
- Les catégories sur l'axe des x (sous forme de liste ou de tableau).
- Les valeurs associées à chaque catégorie (liste des hauteurs des barres).
Il est possible encore une fois de personnaliser le diagramme en modifiant la couleur, l'épaisseur des bordures, les étiquettes et bien d'autres éléments.
Histogramme
Pour créer un histogramme, il faut utiliser la fonction hist
. La fonction trace un histogramme automatiquement à partir des valeurs d'une série.
Paramètres de la fonction hist
Paramètre | Type de valeur | Valeur par défaut | Description |
---|---|---|---|
x | Series | Aucune | La série pour laquelle tracer un histogramme |
bins | nombre ou liste | aucune | Si un nombre est indiqué, alors l'histogramme formera ce nombre de catégories. Si une liste est indiquée, alors l'histogramme formera des catégories en utilisant les valeurs de la liste comme limite. Les intervalles ainsi formés sont fermés à gauche et ouverts à droite. La première et la dernière valeur doivent être indiquées. |
density | booléen | False | Affiche la fonction de densité empirique. |
histtype | chaîne de caractères | "bar" | Change le type d'histogramme : barres (bar), barres empilées (barstacked), escalier (step), escalier rempli (stepfilled). |
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter
# 30 notes
notes = [89.0, 74.0, 54.0, 71.0, 82.0, 75.0, 78.0, 55.0, 91.0, 59.0, 75.0, 81.0, 54.0, 66.0, 55.0,
99.0, 85.0, 69.0, 90.0, 88.0, 90.0, 63.0, 97.0, 100, 48.0, 69.0, 42.0, 95.0, 44.0, 70.0]
fig, ax = plt.subplots()
# En utilisant la règle de la racine, on devrait former 5 classes
ax.hist(notes, color="goldenrod", edgecolor="darkgoldenrod", bins=5)
ax.set_title("Notes d'élève à une évaluation")
ax.set_xlabel("Note (%)")
ax.xaxis.set_major_formatter(PercentFormatter(100))
ax.set_ylabel("Fréquence")
plt.show()
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter
# 30 notes
notes = [89.0, 74.0, 54.0, 71.0, 82.0, 75.0, 78.0, 55.0, 91.0, 59.0, 75.0, 81.0, 54.0, 66.0, 55.0,
99.0, 85.0, 69.0, 90.0, 88.0, 90.0, 63.0, 97.0, 100, 48.0, 69.0, 42.0, 95.0, 44.0, 70.0]
fig, ax = plt.subplots()
# On forme, de façon arbitraire, des classes aux multiples de 10% entre 40 et 100%
ax.hist(notes, bins=range(40, 101, 10), color="goldenrod", edgecolor="darkgoldenrod")
ax.set_title("Note d'élèves à une évaluation")
ax.set_xlabel("Note (%)")
ax.xaxis.set_major_formatter(PercentFormatter(100))
ax.set_ylabel("Fréquence")
plt.show()
Diagrammes circulaires
La fonction pie
permet de créer un diagramme circulaire (aussi appelé pointe de tarte au Québec ou gruyère chez nos cousins français). Les deux premiers paramètres sont respectivement :
- Les catégories, exprimées sous forme de liste.
- Les valeurs associées à chaque catégorie.
Il est possible encore une fois de personnaliser le diagramme. Notez dans l'exemple ci-bas comment on peut faire afficher les valeurs sous forme de pourcentages automatiques.
import matplotlib.pyplot as plt
# Répartition des préférences de boisson
boissons = ["Café", "Thé", "Jus", "Soda", "Eau"]
reponses = [80, 9, 29, 33, 75] # Réponses des répondants
fig, ax = plt.subplots()
ax.pie(reponses, labels=boissons, autopct='%1.1f%%', colors=["brown", "green", "orange", "red", "blue"], startangle=90)
ax.set_title("Préférences de boisson dans un sondage")
plt.show()
Scatter avec tailles variables (à venir)
Travailler avec plusieurs séries de données
Lorsqu'on veut afficher plusieurs séries de données, on rappelle la fonction d'affichage sur le même objet d'Axe
. Les séries vont alors se superposer.
Nuages de points et courbes
Il est possible de superposer un nuage de points (scatter
) et une courbe (plot
) dans un même graphique.
Ajouter une légende
Pour ajouter une légende, on précise l'étiquette de la légende pour chaque série de données avec le paramètre label
. Ensuite, il suffit d'appeler la fonction legend
sur l'objet Axis
pour que celle-ci s'affiche. La fonction legend accepte un paramètre loc
pour indiquer sa localisation dans le graphique. Les valeurs possibles sont : best (par défaut), upper right, upper left, lower left, lower right, right, center left, center right, lower center, upper center et center.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 4 * np.pi, 200)
serie_1 = np.cos(x)
serie_2 = np.sin(x)
graphe, ax = plt.subplots()
ax.plot(x, serie_1, color="darkblue", legend="cos(x)")
ax.plot(x, serie_2, color="darkred", legende="sin(x)")
ax.legend(loc="upper right")
plt.show()
Plus de personnalisation
La page de la documentation vous offre une foule de paramètres pour personnaliser l'affichage des légendes.
Travailler avec les sous-graphiques
La fonction subplots
permet de générer un espace dans lequel on peut tracer un graphique. Il est aussi possible de l'utiliser pour créer plusieurs espaces dans une même fenêtre. Pour ce faire, on doit lui indiquer deux paramètres nrows
, le nombre de lignes et ncols
, le nombre de colonnes. Lorsque la figure générée comporte plus qu'un espace, le contenu de ax
est un tableau. S'il n'y a qu'une ligne ou qu'une colonne, alors c'est un tableau unidimensionnel. S'il y a plusieurs lignes et colonnes, alors c'est un tableau multidimensionnel.



Chaque élément du tableau ax
est un objet Axis
et peut être utilisé comme tel.
Ajouter les incertitudes
La fonction errorbar
permet de tracer les barres d'erreur sur un graphique. Il existe différentes façons de tracer les barres d'erreurs. Pour préciser l'erreur sur l'axe des abscisses, on utilise le paramètre xerr
et pour l'axe des ordonnées yerr
. Les deux paramètres fonctionnent de la même façon, c'est simplement l'endroit où est tracée la barre d'erreur qui diffère.
Il faut toujours utiliser les paramètres suivants pour avoir l'affichage souhaité : fmt = "none"
et capsize=5
.
Erreur constante
Si tous les points ont une erreur constante et symétrique, on peut indiquer ce nombre comme valeur d'erreur.
Erreur par point - symétrique
Si l'erreur est symétrique, mais diffère pour chaque point, on passe une liste de valeurs à xerr
ou yerr
.
Erreur par point - non symétrique
Si l'erreur n'est pas symétrique, on doit passer une liste qui contient elle-même deux listes : une pour les erreurs négatives et une pour les erreurs positives. Il est important que toutes les valeurs soient positives. Autrement dit, un point 3 qui aurait une incertitude le faisant varier entre 4 et 1 aurait comme valeur d'erreur 1 et 2 (le 2 est automatiquement enlevé du 3).
Enregistrer un fichier
Pour enregistrer un fichier, il faut appeler savefig
sur la variable graphe
(le premier élément retourné par subplots). Cette fonction accepte un paramètre : le chemin où enregistre le graphique.