HOWTO · Seaborn

Tracé multiligne Seaborn

Créez et personnalisez plusieurs courbes Seaborn à partir de données au format large ou long.

Sur cette page

Pour créer un graphique à plusieurs courbes avec Seaborn, placez chaque série dans une colonne d’un DataFrame pandas, puis transmettez ce dernier à lineplot(). Avec des données au format long, associez les colonnes des valeurs et des séries à y et hue. Vous pouvez ensuite personnaliser l’apparence des courbes et ajuster la taille du texte du graphique.

Créer plusieurs courbes à partir de données au format large

Pour représenter cinq séries mesurées, placez chacune dans sa propre colonne du DataFrame et transmettez ce dernier à lineplot(). L’index fournit les valeurs de x et chaque colonne devient une courbe distincte. L’exemple complet ci-dessous crée le DataFrame et le graphique : les libellés des exemples inchangés restent en anglais, notamment « Index », « Value » et « Five series ».

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

values = {
    "A": [11, 3, 0, 0, 0, 0],
    "B": [1, 8, 16, 0, 0, 1],
    "C": [0, 0, 3, 12, 0, 0],
    "D": [2, 1, 0, 0, 13, 0],
    "E": [0, 0, 0, 0, 0, 16],
}
data = pd.DataFrame(values, index=range(6))

ax = sns.lineplot(data=data)
ax.set(xlabel="Index", ylabel="Value", title="Five series")
plt.tight_layout()
plt.show()

L’exécution fournie a terminé cet exemple avec succès, avec le code de sortie 0 et sans sortie standard. Pour l’exécuter localement, installez pandas, Seaborn et Matplotlib dans votre environnement Python. Si vos valeurs se trouvent déjà dans un tableau NumPy, transmettez ce tableau à pd.DataFrame() ; numpy.array() est le constructeur NumPy qui permet de créer un tableau à partir de valeurs.

Tracer plusieurs séries à partir de données au format long

Dans des données au format long, chaque ligne contient une observation, avec des colonnes pour la valeur de x, l’identité de la série et la valeur mesurée. Transmettez les noms de ces colonnes à x, hue et y : Seaborn utilise x pour les positions horizontales, y pour les valeurs verticales et hue pour tracer une courbe distincte par série.

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

long_data = pd.DataFrame(
    [
        (0, "A", 11), (1, "A", 3), (2, "A", 0),
        (0, "B", 1), (1, "B", 8), (2, "B", 16),
        (0, "C", 0), (1, "C", 0), (2, "C", 3),
    ],
    columns=["x", "series", "value"],
)

ax = sns.lineplot(data=long_data, x="x", y="value", hue="series")
ax.set(title="Three series", ylabel="Value")
plt.tight_layout()
plt.show()

L’exécution fournie a terminé ce deuxième exemple avec succès, avec le code de sortie 0 et sans sortie standard. Utilisez le format large lorsque chaque série possède déjà sa propre colonne ; choisissez le format long lorsque chaque ligne indique une série et une observation. Dans les deux cas, donnez aux axes des libellés explicites pour aider les lecteurs à interpréter les valeurs représentées.

Personnaliser l’apparence des courbes et des marqueurs

Avec des données au format long, hue distingue les séries et une palette leur attribue des couleurs. Vous pouvez également définir markers=True et style="series" dans lineplot() pour afficher une forme de marqueur propre à chaque série, ou choisir un marqueur commun. Définissez legend=False lorsque les courbes sont déjà identifiées ailleurs ; conservez la légende lorsqu’elle permet de comprendre l’association entre les couleurs ou les marqueurs et les séries.

Pour contrôler directement l’apparence des courbes, modifiez les objets de ligne renvoyés par le graphique. Le réglage de la taille des marqueurs et de leurs bordures reste ainsi dans les propriétés de ligne de Matplotlib, tandis que Seaborn gère l’association aux séries et le choix de la palette :

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

long_data = pd.DataFrame(
    [(x, series, value) for series, values in {
        "A": [11, 3, 0], "B": [1, 8, 16], "C": [0, 0, 3]
    }.items() for x, value in enumerate(values)],
    columns=["x", "series", "value"],
)

ax = sns.lineplot(
    data=long_data,
    x="x",
    y="value",
    hue="series",
    palette="dark",
    legend=False,
)
for line in ax.lines:
    line.set_linewidth(2)
    line.set_marker("o")
    line.set_markersize(7)
    line.set_markerfacecolor("white")
    line.set_markeredgecolor("red")
    line.set_markeredgewidth(1.5)
ax.set(title="Styled series", ylabel="Value")
plt.tight_layout()
plt.show()

L’exécution fournie a terminé cet exemple de personnalisation avec succès, avec le code de sortie 0 et sans sortie standard. L’épaisseur de ligne règle l’épaisseur du trait ; la taille du marqueur règle celle du symbole ; les couleurs de remplissage et de bordure différencient le symbole de la ligne, et l’épaisseur de bordure détermine celle de son contour. Choisissez la forme des marqueurs ou la palette qui convient au graphique, et conservez une légende lorsque les lecteurs en ont besoin pour identifier les séries.

Ajuster la taille du texte du graphique

Définissez l’échelle de police de Seaborn avant de créer le graphique pour agrandir ou réduire le texte. Une échelle supérieure à 1 agrandit le texte par rapport à la valeur par défaut, tandis qu’une valeur inférieure à 1 le réduit. Ce réglage s’applique aux éléments textuels du graphique, notamment aux libellés et aux graduations.

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

sns.set(font_scale=1.3)
data = pd.DataFrame({"A": [2, 4, 3], "B": [1, 3, 5]})
ax = sns.lineplot(data=data, markers=True)
ax.set(title="Scaled plot text", xlabel="Index", ylabel="Value")
plt.tight_layout()
plt.show()

L’exécution fournie a terminé ce dernier exemple avec succès, avec le code de sortie 0 et sans sortie standard. Ajustez font_scale pour que la figure et ses libellés tiennent dans l’espace disponible.