Editar leyenda marina

Usando un dataframe y este código en Python, pude crear un gráfico:

g = sns.lmplot('credibility', 'percentWatched', data=data, hue = 'millennial', markers = ["+", "."], x_jitter = True, y_jitter = True, size=5) g.set(xlabel = 'Credibility Ranking\n ← Low High →', ylabel = 'Percent of Video Watched [%]') 

introduzca la descripción de la imagen aquí

Sin embargo, tener la leyenda diciendo “+ 0” y “. 1” no es muy útil para los lectores. ¿Cómo puedo editar las tags de la leyenda? Lo ideal sería que, en lugar de decir ‘milenaria’, dijera ‘Generación’ y “+ Milenial” “. Generaciones más antiguas”

Si legend_out se establece en True , la leyenda está disponible en la propiedad g._legend y es parte de una figura. La leyenda marina es un objeto estándar de leyenda matplotlib. Por lo tanto puedes cambiar los textos de leyenda como:

 import seaborn as sns tips = sns.load_dataset("tips") g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], legend_out = True) # title new_title = 'My title' g._legend.set_title(new_title) # replace labels new_labels = ['label 1', 'label 2'] for t, l in zip(g._legend.texts, new_labels): t.set_text(l) sns.plt.show() 

introduzca la descripción de la imagen aquí

Otra situación si legend_out se establece en False . Debe definir qué ejes tienen una leyenda (en el siguiente ejemplo, este es el número de eje 0):

 import seaborn as sns tips = sns.load_dataset("tips") g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], legend_out = False) # check axes and find which is have legend leg = g.axes.flat[0].get_legend() new_title = 'My title' leg.set_title(new_title) new_labels = ['label 1', 'label 2'] for t, l in zip(leg.texts, new_labels): t.set_text(l) sns.plt.show() 

introduzca la descripción de la imagen aquí

Además puedes combinar ambas situaciones y usar este código:

 import seaborn as sns tips = sns.load_dataset("tips") g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], legend_out = True) # check axes and find which is have legend for ax in g.axes.flat: leg = g.axes.flat[0].get_legend() if not leg is None: break # or legend may be on a figure if leg is None: leg = g._legend # change legend texts new_title = 'My title' leg.set_title(new_title) new_labels = ['label 1', 'label 2'] for t, l in zip(leg.texts, new_labels): t.set_text(l) sns.plt.show() 

Este código funciona para cualquier plot marítima que se basa en la clase Grid .

Me tomó un tiempo leer todo lo anterior. Esta fue la respuesta para mí:

 import seaborn as sns import matplotlib.pyplot as plt tips = sns.load_dataset("tips") g = sns.lmplot( x="total_bill", y="tip", hue="smoker", data=tips, legend=False ) plt.legend(title='Smoker', loc='upper left', labels=['Hell Yeh', 'Nah Bruh']) plt.show(g) 

Consulte esto para obtener más argumentos: matplotlib.pyplot.legend

introduzca la descripción de la imagen aquí