W3docs

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 :

  1. Importer matplotlib.pyplot (conventionnellement sous le nom plt).
  2. Appeler une fonction de tracé (plt.plot(), plt.bar(), etc.) avec vos données.
  3. Appeler des fonctions décoratives pour ajouter des titres, des étiquettes d'axe, des légendes, etc.
  4. Appeler plt.show() pour afficher la figure, ou plt.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 matplotlib

Vérifiez l'installation en l'important :

import matplotlib
print(matplotlib.__version__)  # e.g. 3.9.0

Cré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=90 fait 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 rouge
  • o — marqueur cercle
  • -- — ligne en tirets

Codes courants de chaîne de format :

CodeSignificationCodeSignification
bbleu-ligne continue
gvert--ligne en tirets
rrouge-.ligne tiret-point
knoir:ligne en pointillés
ocerclescarré
^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, .svg et .pdf.
  • bbox_inches="tight" rogne les espaces blancs autour de la figure pour éviter tout rognage.
  • Appelez toujours plt.savefig() avant plt.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 memory

Chevauchement 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 graphiqueFonctionMeilleure utilisation
Graphique linéaireplt.plot()Tendances sur des données ordonnées
Diagramme en barresplt.bar() / plt.barh()Comparaison de catégories discrètes
Camembertplt.pie()Composition partie-tout
Nuage de pointsplt.scatter()Relation entre deux variables
Sous-graphiquesplt.subplots()Plusieurs graphiques dans une figure

Chapitres connexes

Was this page helpful?