Matplotlib : tes données méritent mieux qu'un tableur

Matplotlib : tes données méritent mieux qu'un tableur

De quoi avez-vous besoin

Version de Python

3.x

Packages

  • {"nom": "Matplotlib", "version": "3.10+"}

Difficulté

Débutant

Tes scripts Python crachent des listes, des DataFrames, des logs. Pour y voir clair, tu ouvres un tableur, tu sélectionnes des colonnes, tu bidouilles un graphique, et le résultat est moche. Matplotlib règle le problème à la racine : c'est la bibliothèque de visualisation de référence de Python, celle que Pandas, NumPy et presque tout l'écosystème data utilisent sous le capot pour dessiner.

Ici, pas besoin d'être data scientist. En une poignée de lignes, tu transformes des chiffres bruts en courbes, en barres et en histogrammes, puis tu les exportes en PNG pour tes rapports, tes slides ou ton site. Le tout sans jamais rouvrir un tableur.

On part d'un cas concret : les ventes d'une semaine, rangées dans une simple liste Python. Chaque étape est indépendante et copiable telle quelle.

Pour suivre, il te faut Python 3 et rien d'autre. On touche à Pandas et NumPy dans deux exemples : si tu ne les as pas encore, un pip install pandas numpy les ajoute en trente secondes, mais les trois premières étapes fonctionnent sans.

1. Installer Matplotlib

Matplotlib s'installe en une commande. Si tu utilises déjà un notebook ou un environnement scientifique, il est probablement déjà présent : essaie d'abord de l'importer avant de l'installer.

bash
pip install matplotlib

2. Ta première courbe en cinq lignes

On trace les ventes de la semaine. plot() prend deux listes : les abscisses (les jours) et les ordonnées (les ventes). Le paramètre marker pose un point sur chaque valeur, color change la teinte, et grid() ajoute une grille discrète pour lire le graphique d'un coup d'œil.

python
import matplotlib.pyplot as plt

jours = ["Lun", "Mar", "Mer", "Jeu", "Ven"]
ventes = [120, 145, 132, 178, 205]

plt.plot(jours, ventes, marker="o", color="#2e7d32", linewidth=2)
plt.title("Ventes de la semaine")
plt.xlabel("Jour")
plt.ylabel("Ventes (euros)")
plt.grid(alpha=0.3)
plt.show()

Petite précision : plt est l'alias classique de matplotlib.pyplot. On l'importe une seule fois en haut du script, et toutes les fonctions de tracé — plot, title, show, savefig — s'y accrochent.

3. Comparer deux séries avec une légende

Une courbe, c'est bien. Deux courbes qui se comparent, c'est mieux. On ajoute une seconde série — les ventes de la semaine précédente — et on la distingue grâce à label, que legend() affiche ensuite. Note la liste en compréhension [v * 0.8 for v in ventes] : elle simule des ventes inférieures de 20 % sans les écrire à la main.

python
plt.plot(jours, ventes, marker="o", label="Cette semaine")
plt.plot(jours, [v * 0.8 for v in ventes], marker="s", label="Semaine dernière")
plt.title("Comparaison des ventes")
plt.xlabel("Jour")
plt.ylabel("Ventes (euros)")
plt.legend()
plt.grid(alpha=0.3)
plt.show()

4. Des barres pour les catégories

Quand tes données sont des catégories — des produits, des mois, des pays — la courbe ne veut rien dire. Le diagramme en barres est bien plus lisible : bar() prend la liste des noms puis celle des valeurs. Ici on lit directement un DataFrame Pandas, sans conversion.

python
import pandas as pd

data = pd.DataFrame({
    "Produit": ["Clavier", "Souris", "Écran", "Webcam", "Casque"],
    "Ventes": [310, 480, 220, 190, 260],
})

plt.bar(data["Produit"], data["Ventes"], color="#1f77b4")
plt.title("Ventes par produit")
plt.ylabel("Unités vendues")
plt.xticks(rotation=15)
plt.tight_layout()
plt.show()

5. L'histogramme pour voir la distribution

Avec des centaines de mesures — temps de réponse, tailles de fichiers, prix — tu ne veux pas voir chaque point, tu veux voir leur répartition. hist() découpe les valeurs en tranches (bins) et compte combien tombent dans chacune. On génère ici mille temps de réponse fictifs autour de 60 ms avec NumPy, et la bosse qui se dessine te dit d'emblée où se situe la majorité.

python
import numpy as np

rng = np.random.default_rng(42)
temps = rng.normal(loc=60, scale=15, size=1000)  # 1000 temps de réponse en ms

plt.hist(temps, bins=30, color="#ff7043", edgecolor="white")
plt.title("Distribution des temps de réponse")
plt.xlabel("Millisecondes")
plt.ylabel("Fréquence")
plt.show()

6. Exporter en PNG ou PDF

show() ouvre une fenêtre interactive pour explorer. Mais pour un rapport, un site ou un mail, tu veux un fichier. savefig() écrit l'image sur le disque en une ligne : PNG pour le web, PDF pour l'impression, et le paramètre dpi contrôle la netteté. Remplace simplement show() par savefig() dans les exemples précédents.

python
plt.savefig("ventes.png", dpi=150)  # PNG net pour le web
plt.savefig("rapport.pdf")          # PDF pour l'impression

7. Aller plus loin sans se noyer

Une fois les bases en main, deux raccourcis changent la donne. plt.style.use() applique un thème complet en une ligne, et plt.subplots() juxtapose plusieurs graphiques pour comparer sans changer d'écran. Pas besoin de tout mémoriser : la galerie officielle de Matplotlib est une mine d'exemples prêts à copier.

python
plt.style.use("ggplot")  # thème prêt à l'emploi

fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].plot(jours, ventes, marker="o")
axes[1].bar(data["Produit"], data["Ventes"])
plt.tight_layout()
plt.show()

Voilà, tu sais transformer des chiffres bruts en graphiques propres. Matplotlib fait bien plus — cartes thermiques, échelles logarithmiques, annotations — mais ces sept briques couvrent déjà 90 % des besoins du quotidien. La prochaine fois que tes données ne veulent rien te dire, commence par les dessiner : une courbe vaut mille lignes de log.