logo oujood
🔍

Visualiser des données Pandas avec Matplotlib

Pandas s'intègre directement avec Matplotlib pour produire des graphiques en quelques lignes. Cette page couvre les types de visualisation les plus utiles en analyse de données, avec les options de personnalisation essentielles.

OUJOOD.COM

Pandas et Matplotlib : comment ça s'articule

Pandas intègre Matplotlib en interne. Quand vous appelez df.plot(), Pandas utilise Matplotlib pour générer le graphique. Vous n'avez pas besoin d'appeler Matplotlib directement pour les cas simples — mais vous pouvez personnaliser le résultat avec les fonctions Matplotlib habituelles une fois le graphique créé.

Pour afficher les graphiques dans un terminal ou un script, ajoutez plt.show() à la fin. Dans Jupyter Notebook, %matplotlib inline suffit.

  📋 Copier le code

import pandas as pd
import matplotlib.pyplot as plt

Courbe temporelle avec plot()

Le graphique en courbe est le plus adapté pour visualiser l'évolution d'une valeur dans le temps. df.plot() sans argument produit une courbe pour chaque colonne numérique.

  📋 Copier le code

import pandas as pd
import matplotlib.pyplot as plt

data = {
    "mois":    ["Jan", "Fév", "Mar", "Avr", "Mai", "Jun"],
    "ventes":  [12400, 15200, 11800, 17600, 19200, 16400],
    "retours": [340,   420,   290,   510,   480,   390]
}
df = pd.DataFrame(data)

# Courbe avec mois en axe X
df.plot(x="mois", y=["ventes", "retours"], kind="line", figsize=(10, 5))

plt.title("Ventes et retours par mois")
plt.xlabel("Mois")
plt.ylabel("Montant (€)")
plt.tight_layout()
plt.show()

figsize=(10, 5) définit la taille du graphique en pouces (largeur, hauteur). plt.tight_layout() ajuste automatiquement les marges pour éviter que les étiquettes se chevauchent. Ces deux lignes sont bonnes à prendre comme habitude sur tous vos graphiques.

Graphique en barres avec kind="bar"

Les barres sont adaptées pour comparer des catégories entre elles — chiffre d'affaires par département, ventes par produit, résultats par région.

  📋 Copier le code

import pandas as pd
import matplotlib.pyplot as plt

data = {
    "département": ["RH", "Tech", "Finance", "Marketing", "Commercial"],
    "budget":      [45000, 120000, 78000, 92000, 65000],
    "dépenses":    [42000, 115000, 71000, 88000, 69000]
}
df = pd.DataFrame(data)

# Barres groupées
df.plot(
    x="département",
    y=["budget", "dépenses"],
    kind="bar",
    figsize=(10, 5),
    color=["steelblue", "coral"]
)

plt.title("Budget vs dépenses par département")
plt.xticks(rotation=30, ha="right")
plt.ylabel("Montant (€)")
plt.tight_layout()
plt.show()

# Barres horizontales pour de longs noms de catégories
df.plot(x="département", y="budget", kind="barh", figsize=(8, 5))
plt.tight_layout()
plt.show()

rotation=30 incline les étiquettes de l'axe X pour éviter le chevauchement quand les noms sont longs. kind="barh" produit des barres horizontales — souvent plus lisible quand les catégories ont des noms longs ou qu'il y en a beaucoup.

Histogramme avec kind="hist"

L'histogramme montre la distribution d'une variable numérique : combien de valeurs tombent dans chaque intervalle. C'est l'outil de base pour comprendre la forme d'une distribution avant d'en calculer les statistiques.

  📋 Copier le code

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
df = pd.DataFrame({
    "salaire": np.random.normal(3200, 800, 500),
    "ancienneté": np.random.exponential(4, 500)
})

# Histogramme d'une colonne
df["salaire"].plot(kind="hist", bins=30, figsize=(8, 5), color="steelblue", edgecolor="white")
plt.title("Distribution des salaires")
plt.xlabel("Salaire (€)")
plt.ylabel("Effectif")
plt.tight_layout()
plt.show()

bins=30 contrôle le nombre d'intervalles. Trop peu de bins lissent trop la distribution et cachent sa forme réelle ; trop de bins la fragmentent et font apparaître du bruit. Entre 20 et 50 bins est généralement raisonnable pour quelques centaines de valeurs.

Nuage de points avec kind="scatter"

Le nuage de points est indispensable pour visualiser la relation entre deux variables numériques — et vérifier visuellement ce que la corrélation suggère.

  📋 Copier le code

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(0)
n = 100
df = pd.DataFrame({
    "température": np.random.uniform(15, 35, n),
})
df["ventes_glaces"] = df["température"] * 6 + np.random.normal(0, 20, n)

# Nuage de points
df.plot(
    x="température",
    y="ventes_glaces",
    kind="scatter",
    figsize=(8, 5),
    color="steelblue",
    alpha=0.6
)

plt.title("Température vs ventes de glaces")
plt.xlabel("Température (°C)")
plt.ylabel("Ventes (unités)")
plt.tight_layout()
plt.show()

alpha=0.6 ajoute de la transparence aux points, ce qui révèle les zones denses quand beaucoup de points se superposent. Sur un nuage dense, un alpha entre 0.2 et 0.5 est souvent plus informatif qu'un alpha à 1 (points opaques).

Par carabde | Mis à jour le 26 avril 2026