HOWTO · Seaborn
Comment créer des graphiques en courbes Seaborn
Ce tutoriel montre comment créer des graphiques en courbes en Python à l'aide du module Seaborn. Apprenez à visualiser efficacement les données avec des graphiques en courbes personnalisables, des intervalles de confiance et plusieurs courbes pour une analyse comparative. Parfait pour les débutants comme pour les utilisateurs expérimentés qui souhaitent améliorer leurs compétences en visualisation de données.
Sur cette page
Un graphique en courbes Seaborn associe les valeurs d’une variable x et d’une variable y à des points reliés par une ligne. Il est souvent utilisé pour les séries temporelles, mais x peut être n’importe quelle variable ordonnée ou continue. La fonction seaborn.lineplot() peut également résumer des observations répétées et tracer des lignes distinctes pour des catégories, ce qui la rend utile pour explorer la manière dont les mesures évoluent et pour comparer des groupes.
Premiers pas avec Seaborn
Seaborn est une bibliothèque de tracés statistiques construite sur Matplotlib. Les exemples ci-dessous utilisent un DataFrame pandas, un moyen pratique de conserver ensemble des colonnes nommées. Installez Seaborn et ses dépendances dans votre environnement Python s’ils ne sont pas déjà disponibles ; importez ensuite Seaborn et Matplotlib. Aucune commande d’installation distincte n’est nécessaire dans les exemples de tracés.
Les exemples de ce tutoriel ont été exécutés et vérifiés avec Seaborn 0.13.2, Matplotlib 3.11.2 et pandas 3.1.0 sous Python 3.12, et chaque figure ci-dessous est le résultat que ces exemples ont réellement produit.
Créer un graphique en courbes de base
Passez le DataFrame à data et nommez les colonnes pour x et y. L’exemple suivant utilise des valeurs fixes, de sorte que les points tracés sont reproductibles. L’appel à plt.show() ouvre la figure dans un environnement interactif ; dans un notebook, la figure est généralement affichée comme le résultat de la cellule.
Exécutez cet exemple :
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.DataFrame({
"day": [1, 2, 3, 4, 5],
"visitors": [12, 15, 13, 18, 21],
})
sns.lineplot(data=data, x="day", y="visitors")
plt.xlabel("Day")
plt.ylabel("Visitors")
plt.title("Visitors by day")
plt.tight_layout()
plt.show()
L’axe horizontal utilise day, et l’axe vertical utilise visitors. Remplacez ces noms et ces valeurs par des colonnes de votre propre tableau. Si des lignes partagent une valeur de x, Seaborn peut agréger les observations de y à cette position et afficher une bande d’incertitude ; les sections suivantes expliquent comment interpréter ces caractéristiques.
Personnaliser les graphiques en courbes
Les réglages d’apparence aident le lecteur à distinguer une série ou à suivre ses valeurs. Par exemple, color définit la couleur d’une ligne, marker place un symbole à chaque observation, et linestyle modifie le motif du trait. Ce sont des choix visuels ; ils ne créent pas de groupes et ne changent pas les lignes qui appartiennent aux données. Choisissez des couleurs et des marqueurs qui restent faciles à distinguer à la taille à laquelle la figure sera lue.
Utilisez le même tableau déterministe que ci-dessus dans un script où les importations et la définition de data sont incluses. Cette variante complète met l’accent sur les points avec une ligne en pointillés :
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.DataFrame({
"day": [1, 2, 3, 4, 5],
"visitors": [12, 15, 13, 18, 21],
})
sns.lineplot(data=data, x="day", y="visitors", color="darkorange", marker="o", linestyle="--")
plt.xlabel("Day")
plt.ylabel("Visitors")
plt.title("Visitors by day")
plt.tight_layout()
plt.show()
Pour une apparence différente, modifiez ces arguments ou utilisez les méthodes de Matplotlib pour définir les étiquettes et les titres. Gardez la correspondance de x et de y explicite afin que les lecteurs ultérieurs puissent savoir ce que chaque point représente.
Ajouter des intervalles de confiance
Une bande d’incertitude autour d’une ligne résume la variation ou l’incertitude autour d’une estimation. Sa signification dépend des données et de l’estimateur : lorsque plusieurs observations contribuent à une position x, la ligne centrale peut les résumer, et la bande communique l’incertitude autour de ce résumé. Ce n’est pas simplement un autre nom pour l’écart type. L’écart type décrit la dispersion entre les observations ; un intervalle de confiance décrit l’incertitude d’une quantité estimée.
L’exemple suivant donne à chaque jour trois observations. Le code affiche d’abord la moyenne de chaque groupe, afin que vous puissiez vérifier la ligne tracée par rapport à des nombres simples :
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.DataFrame({
"day": [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4],
"visitors": [10, 12, 14, 14, 16, 18, 13, 15, 17, 19, 21, 23],
})
print(data.groupby("day")["visitors"].mean())
sns.lineplot(data=data, x="day", y="visitors", marker="o")
plt.xlabel("Day")
plt.ylabel("Visitors")
plt.title("Mean visitors by day with 95% confidence band")
plt.tight_layout()
plt.show()
Sortie :
day
1 12.0
2 16.0
3 15.0
4 21.0
Name: visitors, dtype: float64
La ligne centrale passe par les moyennes affichées (12, 16, 15 et 21) : avec des observations répétées, lineplot() agrège par défaut chaque groupe de x avec la moyenne. La bande ombrée est l’intervalle de confiance à 95 % pour cette moyenne, calculé par bootstrapping. Là où un groupe est plus dispersé, la bande est plus large ; elle ne dit rien sur l’endroit où se situent les observations individuelles.
Avant d’interpréter une bande, vérifiez si chaque valeur de x comporte des observations répétées et ce que ces observations représentent. Des mesures répétées sur le même sujet, par exemple, ne représentent pas nécessairement des échantillons indépendants. Avec une seule observation à chaque valeur de x, il n’y a pas de réplication au sein d’une position permettant d’inférer la variation de la même manière. L’interprétation appropriée dépend également de la version de Seaborn et des options de tracé utilisées. Les exemples ici utilisent le paramètre errorbar, disponible depuis Seaborn 0.12 ; dans Seaborn 0.13.2, la valeur par défaut est errorbar=("ci", 95), et errorbar="sd" trace à la place une bande couvrant un écart type de chaque côté de la moyenne. Consultez la documentation de la version installée lorsque vous avez besoin de contrôler l’estimateur ou la méthode d’intervalle. Si la bande n’est pas significative pour vos données, configurez le graphique en conséquence ou omettez-la et expliquez comment la ligne a été calculée.
Lorsque la bande n’est pas significative, désactivez-la avec errorbar=None. L’agrégation a toujours lieu — la ligne relie toujours les moyennes des groupes — mais aucune bande n’est tracée :
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.DataFrame({
"day": [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4],
"visitors": [10, 12, 14, 14, 16, 18, 13, 15, 17, 19, 21, 23],
})
sns.lineplot(data=data, x="day", y="visitors", marker="o", errorbar=None)
plt.xlabel("Day")
plt.ylabel("Visitors")
plt.title("Mean visitors by day without uncertainty band")
plt.tight_layout()
plt.show()
Les deux figures tracent les mêmes moyennes ; seule la bande diffère. Choisissez entre elles selon que le résumé de l’incertitude aide le lecteur, et non selon la figure qui semble la plus nette.
Tracer plusieurs lignes
Pour les comparaisons par catégories, incluez une colonne de catégorie et associez-la à hue. Seaborn trace une ligne colorée distincte pour chaque catégorie et ajoute une légende. Associez style à la même colonne catégorielle ou à une autre lorsque les motifs de ligne peuvent fournir une distinction visuelle supplémentaire. N’utilisez les catégories que lorsque les lignes partagent les mêmes mesures x et y ; gardez des étiquettes et des unités cohérentes entre les groupes.
Voici un exemple complet de données groupées avec des observations fixes :
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.DataFrame({
"week": [1, 2, 3, 1, 2, 3],
"orders": [8, 11, 14, 6, 9, 10],
"store": ["North", "North", "North", "South", "South", "South"],
})
sns.lineplot(data=data, x="week", y="orders", hue="store", style="store", markers=True, dashes=True)
plt.xlabel("Week")
plt.ylabel("Orders")
plt.title("Orders by store")
plt.tight_layout()
plt.show()
Lorsque les données comportent plutôt des colonnes numériques distinctes pour chaque série, remodelez-les en un tableau long avec une colonne de valeurs et une colonne de nom de série, puis associez le nom de la série à hue. Vous pouvez aussi tracer chaque colonne y sur des axes Matplotlib partagés et attribuer une étiquette à chaque ligne avant d’ajouter une légende. Dans les deux approches, la légende doit identifier chaque ligne et correspondre à ses données. N’utilisez pas le style par catégories pour dissimuler des unités ou des échelles différentes ; envisagez des axes distincts ou des figures distinctes lorsqu’une comparaison directe serait trompeuse.
Corriger un nom de colonne mal orthographié
Les noms passés à x et y doivent correspondre exactement aux noms de colonnes de data. Si un nom est mal orthographié, lineplot() lève une erreur avant de ne rien tracer. Cet appel demande une colonne nommée visitor, mais le DataFrame ne contient que visitors :
import pandas as pd
import seaborn as sns
data = pd.DataFrame({
"day": [1, 2, 3, 4, 5],
"visitors": [12, 15, 13, 18, 21],
})
sns.lineplot(data=data, x="day", y="visitor")
Sortie :
ValueError: Could not interpret value `visitor` for `y`. An entry with this name does not appear in `data`.
Le message indique l’argument (y), la valeur qui a échoué (visitor) et la raison, ce qui rend cette erreur rapide à corriger : comparez le nom avec les colonnes réelles — afficher data.columns les énumère — et corrigez l’orthographe. La même erreur apparaît pour x ou pour une colonne hue ou style mal orthographiée.
Conclusion
Utilisez seaborn.lineplot() pour relier les mesures de y le long des valeurs de x, puis choisissez des réglages d’apparence ou des correspondances de catégories pour rendre la figure lisible. Vérifiez la manière dont les observations répétées sont résumées avant d’interpréter une bande d’incertitude, et étiquetez clairement chaque série comparée.
FAQ
- Qu’est-ce que Seaborn ajoute à Matplotlib ? Seaborn fournit une interface de plus haut niveau pour les graphiques statistiques et fonctionne avec Matplotlib pour l’affichage des figures et la mise en forme supplémentaire.
- Puis-je passer un DataFrame pandas ? Oui. Définissez
datasur le DataFrame et passez les noms de colonnes àxety. - Comment modifier l’apparence des lignes ? Utilisez des options telles que
color,markeretlinestyle; celles-ci modifient l’apparence, tandis quehueassocie les catégories à des lignes distinctes. - Que signifie la bande ombrée ? Elle représente un résumé de l’incertitude associé à l’estimation tracée. Son interprétation dépend des observations répétées, de l’estimateur et de la méthode d’intervalle choisie ; ce n’est pas automatiquement un écart type.
- Comment comparer plusieurs lignes ? Associez une colonne de catégorie à
hue, ou tracez des séries étiquetées séparément sur des axes partagés. Veillez à ce que la légende nomme chaque ligne avec précision. - Comment supprimer la bande ombrée ? Passez
errorbar=None. La ligne agrège toujours les observations répétées avec la moyenne ; seule la bande d’incertitude est omise.