Python >> Tutoriel Python >  >> Python Tag >> Seaborn

Ajouter une légende au tracé de points Seaborn

Je suggérerais de ne pas utiliser seaborn pointplot pour tracer. Cela rend les choses inutilement compliquées.
Utilisez plutôt matplotlib plot_date . Cela permet de définir des étiquettes sur les tracés et de les mettre automatiquement dans une légende avec ax.legend() .

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

date = pd.date_range("2017-03", freq="M", periods=15)
count = np.random.rand(15,4)
df1 = pd.DataFrame({"date":date, "count" : count[:,0]})
df2 = pd.DataFrame({"date":date, "count" : count[:,1]+0.7})
df3 = pd.DataFrame({"date":date, "count" : count[:,2]+2})

f, ax = plt.subplots(1, 1)
x_col='date'
y_col = 'count'

ax.plot_date(df1.date, df1["count"], color="blue", label="A", linestyle="-")
ax.plot_date(df2.date, df2["count"], color="red", label="B", linestyle="-")
ax.plot_date(df3.date, df3["count"], color="green", label="C", linestyle="-")

ax.legend()

plt.gcf().autofmt_xdate()
plt.show()

Au cas où l'on serait toujours intéressé par l'obtention de la légende pour les pointplots, voici une marche à suivre :

sns.pointplot(ax=ax,x=x_col,y=y_col,data=df1,color='blue')
sns.pointplot(ax=ax,x=x_col,y=y_col,data=df2,color='green')
sns.pointplot(ax=ax,x=x_col,y=y_col,data=df3,color='red')

ax.legend(handles=ax.lines[::len(df1)+1], labels=["A","B","C"])

ax.set_xticklabels([t.get_text().split("T")[0] for t in ax.get_xticklabels()])
plt.gcf().autofmt_xdate()

plt.show()

Vieille question, mais il existe un moyen plus simple.

sns.pointplot(x=x_col,y=y_col,data=df_1,color='blue')
sns.pointplot(x=x_col,y=y_col,data=df_2,color='green')
sns.pointplot(x=x_col,y=y_col,data=df_3,color='red')
plt.legend(labels=['legendEntry1', 'legendEntry2', 'legendEntry3'])

Cela vous permet d'ajouter les tracés de manière séquentielle et de ne pas avoir à vous soucier des conneries de matplotlib en plus de définir les éléments de légende.


J'ai essayé d'utiliser la réponse d'Adam B, cependant, cela n'a pas fonctionné pour moi. Au lieu de cela, j'ai trouvé la solution de contournement suivante pour ajouter des légendes aux points.

import matplotlib.patches as mpatches
red_patch = mpatches.Patch(color='#bb3f3f', label='Label1')
black_patch = mpatches.Patch(color='#000000', label='Label2')

Dans les diagrammes de points, la couleur peut être spécifiée comme mentionné dans les réponses précédentes. Une fois ces patchs correspondant aux différentes parcelles mis en place,

plt.legend(handles=[red_patch, black_patch])

Et la légende doit apparaître dans le pointplot.