OUJOOD.COM
Seaborn vs Matplotlib : pourquoi utiliser les deux
Matplotlib est la fondation — flexible et puissante, mais verbeuse pour les graphiques statistiques courants. Seaborn est construit par-dessus et fournit des fonctions de haut niveau pour les visualisations analytiques les plus fréquentes : distributions, comparaisons par catégories, matrices de corrélation. Les deux se complètent : Seaborn crée le graphique, Matplotlib le personnalise.
Seaborn s'installe séparément :
pip install seaborn
Heatmap de corrélation
La heatmap de corrélation est le graphique le plus utilisé pour visualiser les relations entre toutes les variables numériques d'un DataFrame. Les couleurs encodent l'intensité et le signe de la corrélation.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
n = 100
df = pd.DataFrame({
"température": np.random.uniform(15, 35, n),
"humidité": np.random.uniform(30, 90, n),
"pression": np.random.uniform(1000, 1025, n)
})
df["ventes_glaces"] = df["température"] * 5 + np.random.normal(0, 15, n)
df["ventes_manteaux"] = -df["température"] * 3 + 120 + np.random.normal(0, 10, n)
# Heatmap de la matrice de corrélation
plt.figure(figsize=(8, 6))
sns.heatmap(
df.corr().round(2),
annot=True, # afficher les valeurs dans les cellules
cmap="coolwarm", # rouge positif, bleu négatif
vmin=-1, vmax=1, # fixer l'échelle de couleurs
linewidths=0.5
)
plt.title("Matrice de corrélation")
plt.tight_layout()
plt.show()
annot=True affiche le coefficient numérique dans chaque cellule. cmap="coolwarm" utilise le rouge pour les corrélations positives et le bleu pour les négatives, avec le blanc au centre pour les valeurs proches de zéro. Fixer vmin=-1, vmax=1 garantit que l'échelle est cohérente et que 0 correspond toujours au blanc.
Boxplot pour comparer des distributions
Le boxplot (boîte à moustaches) compare la distribution d'une variable numérique entre plusieurs catégories. Il montre la médiane, les quartiles et les valeurs aberrantes en un seul graphique.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
df = pd.DataFrame({
"département": np.repeat(["RH", "Tech", "Finance", "Marketing"], 50),
"salaire": np.concatenate([
np.random.normal(2800, 400, 50),
np.random.normal(3800, 600, 50),
np.random.normal(3400, 500, 50),
np.random.normal(3100, 450, 50)
])
})
# Boxplot par département
plt.figure(figsize=(9, 5))
sns.boxplot(data=df, x="département", y="salaire", palette="Set2")
plt.title("Distribution des salaires par département")
plt.xlabel("Département")
plt.ylabel("Salaire (€)")
plt.tight_layout()
plt.show()
La ligne centrale de chaque boîte est la médiane. Les bords de la boîte sont les quartiles Q1 (25 %) et Q3 (75 %). Les moustaches s'étendent jusqu'à 1,5 fois l'intervalle interquartile. Les points au-delà sont des valeurs aberrantes. En un coup d'œil, vous voyez si les distributions se chevauchent, quelle catégorie a la médiane la plus haute, et où se trouvent les outliers.
Barplot avec intervalles de confiance
sns.barplot() affiche la moyenne par catégorie avec un intervalle de confiance à 95 % automatiquement calculé. C'est plus informatif qu'un simple graphique en barres car il montre l'incertitude.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1)
df = pd.DataFrame({
"département": np.repeat(["RH", "Tech", "Finance", "Marketing"], 30),
"satisfaction": np.concatenate([
np.random.normal(3.8, 0.8, 30),
np.random.normal(4.2, 0.6, 30),
np.random.normal(3.5, 0.9, 30),
np.random.normal(4.0, 0.7, 30)
]).clip(1, 5)
})
# Moyenne + intervalle de confiance par catégorie
plt.figure(figsize=(8, 5))
sns.barplot(data=df, x="département", y="satisfaction", palette="Blues_d", errorbar="ci")
plt.title("Satisfaction moyenne par département")
plt.ylabel("Score de satisfaction (1–5)")
plt.ylim(0, 5)
plt.tight_layout()
plt.show()
Pairplot pour l'exploration multi-variables
sns.pairplot() crée une grille de graphiques qui montre la relation entre chaque paire de variables numériques. C'est l'outil d'exploration le plus complet pour un premier regard sur un nouveau jeu de données.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
n = 80
df = pd.DataFrame({
"âge": np.random.randint(22, 60, n),
"salaire": np.random.normal(3200, 800, n),
"score": np.random.uniform(50, 100, n),
"niveau": np.random.choice(["junior", "senior"], n)
})
# Pairplot avec couleur par catégorie
sns.pairplot(df, hue="niveau", plot_kws={"alpha": 0.6})
plt.suptitle("Relations entre variables — junior vs senior", y=1.02)
plt.tight_layout()
plt.show()
Avec hue="niveau", chaque point est coloré selon la catégorie, ce qui permet de voir si les deux groupes ont des distributions différentes. La diagonale affiche les histogrammes de chaque variable par groupe. Sur un DataFrame avec plus de 6 colonnes numériques, le pairplot devient difficile à lire — limitez-vous aux colonnes pertinentes avec sns.pairplot(df[["col1", "col2", "col3"]]).
Par carabde | Mis à jour le 26 avril 2026