Tracé avec Python Matplotlib : Guide complet
Apprenez à créer des graphiques linéaires, diagrammes en barres, camemberts, nuages de points et sous-graphiques en Python avec Matplotlib, avec des exemples.
Matplotlib est la bibliothèque de visualisation de données la plus utilisée en Python. Ce guide explique comment créer les types de graphiques les plus courants — graphiques linéaires, diagrammes en barres, camemberts, nuages de points et sous-graphiques — et comment les personnaliser avec des étiquettes, des couleurs, des légendes et des contrôles de mise en page. Il suppose que vous avez déjà installé Matplotlib et que vous pouvez exécuter des scripts Python localement.
Qu'est-ce que le tracé Matplotlib ?
Le module pyplot de Matplotlib fournit une interface de style MATLAB qui vous permet de construire des graphiques étape par étape : créer une figure, ajouter des données, ajouter des étiquettes, puis afficher ou enregistrer le résultat. Chaque graphique suit le même schéma :
- Importer
matplotlib.pyplot(conventionnellement sous le nomplt). - Appeler une fonction de tracé (
plt.plot(),plt.bar(), etc.) avec vos données. - Appeler des fonctions décoratives pour ajouter des titres, des étiquettes d'axe, des légendes, etc.
- Appeler
plt.show()pour afficher la figure, ouplt.savefig()pour l'écrire sur le disque.
Comprendre cette séquence permet de passer facilement d'un type de graphique à l'autre et de les combiner en figures plus complexes.
Installer Matplotlib
Si vous n'avez pas encore installé Matplotlib, exécutez la commande suivante dans votre terminal :
pip install matplotlibVérifiez l'installation en l'important :
import matplotlib
print(matplotlib.__version__) # e.g. 3.9.0Créer un graphique linéaire
Un graphique linéaire est le type de graphique par défaut et est idéal pour montrer des tendances dans le temps ou toute séquence ordonnée.
import matplotlib.pyplot as plt
# Data
years = [2015, 2016, 2017, 2018, 2019, 2020]
sales = [100, 150, 200, 250, 300, 350]
# Plot
plt.plot(years, sales)
# Labels and title
plt.xlabel("Year")
plt.ylabel("Sales (units)")
plt.title("Annual Sales")
plt.show()plt.plot(x, y) trace une ligne continue reliant chaque paire (x, y). L'axe des abscisses affiche les années et l'axe des ordonnées affiche les chiffres de ventes, révélant la tendance à la hausse en un coup d'œil.
Tracer plusieurs lignes
Pour comparer deux ensembles de données sur les mêmes axes, appelez plt.plot() deux fois avant plt.show(). Utilisez le paramètre label et plt.legend() pour identifier chaque ligne :
import matplotlib.pyplot as plt
years = [2018, 2019, 2020, 2021, 2022]
product_a = [120, 145, 170, 210, 260]
product_b = [90, 115, 140, 165, 195]
plt.plot(years, product_a, label="Product A")
plt.plot(years, product_b, label="Product B")
plt.xlabel("Year")
plt.ylabel("Revenue ($k)")
plt.title("Revenue by Product")
plt.legend()
plt.show()Matplotlib attribue automatiquement des couleurs différentes à chaque série. L'appel à plt.legend() ajoute une légende qui associe les couleurs aux étiquettes.
Créer un diagramme en barres
Les diagrammes en barres comparent des catégories discrètes. Utilisez plt.bar() pour des barres verticales et plt.barh() pour des barres horizontales.
import matplotlib.pyplot as plt
countries = ["USA", "China", "Japan", "Germany", "UK"]
gdp = [21.44, 14.14, 5.15, 4.17, 2.62]
plt.bar(countries, gdp, color="steelblue")
plt.xlabel("Country")
plt.ylabel("GDP (USD trillions)")
plt.title("Top 5 Economies by GDP")
plt.show()La hauteur de chaque barre représente la valeur du PIB. Le paramètre color accepte n'importe quelle couleur CSS nommée, une chaîne hexadécimale ou un tuple RGB.
Diagrammes en barres groupées
Lorsque vous devez comparer plusieurs catégories côte à côte, décalez manuellement les positions des barres en utilisant range() et un décalage de largeur :
import matplotlib.pyplot as plt
categories = ["Q1", "Q2", "Q3", "Q4"]
team_a = [30, 45, 38, 52]
team_b = [25, 40, 35, 48]
x = range(len(categories))
width = 0.35
plt.bar([i - width / 2 for i in x], team_a, width=width, label="Team A")
plt.bar([i + width / 2 for i in x], team_b, width=width, label="Team B")
plt.xticks(x, categories)
plt.xlabel("Quarter")
plt.ylabel("Sales")
plt.title("Quarterly Sales by Team")
plt.legend()
plt.show()plt.xticks(x, categories) remplace les positions numériques des graduations par les noms de trimestres réels.
Créer un camembert
Les camemberts montrent comment des parties constituent un tout. Utilisez-les avec parcimonie — ils fonctionnent mieux avec cinq tranches ou moins dont la somme est égale à 100 %.
import matplotlib.pyplot as plt
brands = ["Samsung", "Apple", "Huawei", "Xiaomi", "Others"]
market_share = [19.2, 15.9, 14.6, 10.2, 40.1]
plt.pie(
market_share,
labels=brands,
autopct="%1.1f%%", # show percentage inside each slice
startangle=90, # rotate so the first slice starts at the top
)
plt.title("Smartphone Market Share")
plt.show()autopct="%1.1f%%"affiche le pourcentage à une décimale à l'intérieur de chaque tranche.startangle=90fait pivoter le graphique de sorte que la première tranche commence à 12 heures, ce qui est plus facile à lire.
Remarque : Les chiffres de parts de marché ci-dessus sont approximatifs et sont utilisés ici à titre d'illustration uniquement.
Créer un nuage de points
Les nuages de points révèlent la relation entre deux variables continues. Chaque point représente une observation.
import matplotlib.pyplot as plt
hours_studied = [1, 2, 3, 4, 5, 6, 7, 8]
exam_scores = [45, 52, 60, 65, 72, 78, 85, 90]
plt.scatter(hours_studied, exam_scores, color="coral", edgecolors="black", s=80)
plt.xlabel("Hours Studied")
plt.ylabel("Exam Score")
plt.title("Study Time vs. Exam Score")
plt.show()Le paramètre s contrôle la taille des marqueurs en points au carré. edgecolors="black" ajoute un contour à chaque point, les rendant plus faciles à distinguer lorsqu'ils se chevauchent.
Pour une exploration approfondie, consultez le chapitre Nuage de points Matplotlib.
Personnaliser l'apparence des graphiques
Matplotlib offre un contrôle fin sur presque chaque élément visuel.
Couleurs, marqueurs et styles de ligne
Passez une chaîne de format comme troisième argument à plt.plot() pour définir le style du marqueur, le style de ligne et la couleur en une seule étape :
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y, "ro--") # red circles, dashed line
plt.xlabel("x")
plt.ylabel("y")
plt.title("Custom Style")
plt.show()La chaîne de format "ro--" combine :
r— couleur rougeo— marqueur cercle--— ligne en tirets
Codes courants de chaîne de format :
| Code | Signification | Code | Signification |
|---|---|---|---|
b | bleu | - | ligne continue |
g | vert | -- | ligne en tirets |
r | rouge | -. | ligne tiret-point |
k | noir | : | ligne en pointillés |
o | cercle | s | carré |
^ | triangle haut | * | étoile |
Vous pouvez également passer des arguments nommés pour plus de contrôle :
plt.plot(x, y, color="#2196f3", linewidth=2, linestyle="--", marker="o", markersize=8)Taille de la figure et DPI
Définissez les dimensions de la figure (en pouces) avant le tracé en appelant plt.figure() :
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5), dpi=100) # 1000×500 pixels
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
plt.plot(x, y)
plt.title("Wide Figure")
plt.show()figsize=(width, height) prend des valeurs en pouces. dpi (points par pouce) contrôle la densité des pixels — 100 dpi convient pour l'écran ; 300 dpi est typique pour l'impression.
Ajouter une grille
Une grille facilite la lecture des valeurs :
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [3, 7, 2, 9, 4]
plt.plot(x, y, marker="o")
plt.grid(True, linestyle="--", alpha=0.7)
plt.title("Plot with Grid")
plt.show()alpha=0.7 rend les lignes de la grille semi-transparentes afin qu'elles n'occultent pas les données. Consultez le chapitre Grille Matplotlib pour plus d'options.
Créer des sous-graphiques
Les sous-graphiques vous permettent d'afficher plusieurs graphiques dans une seule figure, ce qui est utile pour comparer différentes vues du même ensemble de données.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 4, 9, 16, 25]
y3 = [5, 3, 7, 2, 8]
y4 = [10, 7, 4, 5, 6]
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0][0].plot(x, y1, "b-o")
axes[0][0].set_title("Linear")
axes[0][1].plot(x, y2, "r--s")
axes[0][1].set_title("Quadratic")
axes[1][0].bar(x, y3, color="green")
axes[1][0].set_title("Bar Chart")
axes[1][1].scatter(x, y4, color="purple", s=80)
axes[1][1].set_title("Scatter")
plt.tight_layout() # prevent overlapping labels
plt.show()plt.subplots(rows, cols) renvoie un objet Figure et un tableau 2D d'objets Axes. Travailler avec des objets Axes individuels (par ex., axes[0][0].plot(...)) est l'approche privilégiée pour les mises en page à plusieurs graphiques car elle vous donne un contrôle indépendant sur chaque panneau. plt.tight_layout() ajuste automatiquement l'espacement afin que les titres et les étiquettes ne se chevauchent pas.
Consultez le chapitre Sous-graphiques Matplotlib pour les options de mise en page avancées.
Enregistrer un graphique dans un fichier
plt.savefig() écrit la figure actuelle sur le disque. Il déduit le format du fichier à partir de l'extension :
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y, marker="o")
plt.title("Saved Plot")
plt.savefig("my_plot.png", dpi=150, bbox_inches="tight")- Les formats pris en charge incluent
.png,.jpg,.svget.pdf. bbox_inches="tight"rogne les espaces blancs autour de la figure pour éviter tout rognage.- Appelez toujours
plt.savefig()avantplt.show()—plt.show()efface l'état de la figure.
Pièges courants
plt.show() efface la figure. Si vous appelez plt.savefig() après plt.show(), vous enregistrerez une image vide. Enregistrez toujours en premier, affichez ensuite.
Exécution dans des environnements non interactifs. Dans les scripts, plt.show() ouvre une fenêtre GUI et se bloque jusqu'à sa fermeture. Dans les notebooks Jupyter, utilisez %matplotlib inline en haut afin que les graphiques s'affichent en ligne. Sur les serveurs sans interface graphique (CI, Docker), basculez vers un backend non interactif : import matplotlib; matplotlib.use("Agg") avant d'importer pyplot.
Oublier de fermer les figures. Chaque appel à plt.figure() ouvre une nouvelle figure en mémoire. Dans des boucles qui génèrent de nombreux graphiques, fermez chacun avec plt.close() pour éviter l'épuisement de la mémoire.
import matplotlib.pyplot as plt
for i in range(10):
plt.plot([1, 2, 3], [i, i * 2, i * 3])
plt.savefig(f"plot_{i}.png")
plt.close() # release memoryChevauchement des sous-graphiques. Appeler plt.tight_layout() ou plt.subplots_adjust() après avoir créé tous les sous-graphiques corrige le chevauchement des titres et des étiquettes de graduation.
Résumé
| Type de graphique | Fonction | Meilleure utilisation |
|---|---|---|
| Graphique linéaire | plt.plot() | Tendances sur des données ordonnées |
| Diagramme en barres | plt.bar() / plt.barh() | Comparaison de catégories discrètes |
| Camembert | plt.pie() | Composition partie-tout |
| Nuage de points | plt.scatter() | Relation entre deux variables |
| Sous-graphiques | plt.subplots() | Plusieurs graphiques dans une figure |
Chapitres connexes
- Introduction à Matplotlib — présentation de la bibliothèque et de ses composants
- Démarrer avec Matplotlib — installation et votre premier graphique
- Graphiques linéaires Matplotlib — styles de ligne, marqueurs et graphiques multi-séries en détail
- Diagrammes en barres Matplotlib — barres verticales, horizontales et empilées
- Camemberts Matplotlib — tranches éclatées, couleurs personnalisées et graphiques en anneau
- Histogrammes Matplotlib — graphiques de distribution et contrôle des intervalles
- Nuage de points Matplotlib — graphiques à bulles et nuages de points avec carte de couleurs
- Sous-graphiques Matplotlib — mises en page multi-panneaux avancées
- Étiquettes Matplotlib — titres, étiquettes d'axe, annotations et texte
- Grille Matplotlib — lignes de grille et personnalisation des graduations
- Marqueurs Matplotlib — styles, tailles et couleurs de contour des marqueurs