Python Seaborn Matplotlib настройка стиля линии как легенды

У меня есть следующая сборка сюжета с Python и Seaborn с использованием метода factorplot (). Можно ли использовать стиль линии в качестве легенды для замены легенды на основе цвета линии справа? enter image description here

graycolors = sns.mpl_palette('Greys_r', 4)
g = sns.factorplot(x="k", y="value", hue="class", palette=graycolors, data=df, linestyles=["-", "--"])

кроме того, я пытаюсь получить обе строки в черном цвете, используя параметр color="black" в моем методе factorplot, но это приводит к исключению "factorplot() получил неожиданный аргумент ключевого слова"color"". Как я могу нарисовать обе линии в одном и том же цвет и отделить их только linestyle?

спасибо

2 ответов


Я искал решение, пытаясь поместить linestyle в легенду, как библиотек matplotlib, но я пока не нашел как сделать это в Сиборн. Однако, чтобы сделать данные ясными в легенде, я использовал разные метки:

import seaborn as sns
import numpy as np
import pandas as pd

# creating some data
n = 11
x = np.linspace(0,2,n)
y = np.sin(2*np.pi*x)
y2 = np.cos(2*np.pi*x) 
df=pd.DataFrame({'x':np.append(x, x),'y':np.append(y, y2),'class':np.append(np.repeat('sin',n),np.repeat('cos',n))})

# plot the data with the markers
# note that I put the legend=False to move it up (otherwise it was blocking the graph)
g=sns.factorplot(x="x",y="y",hue="class",palette=graycolors, data=df, linestyles=["-", "--"],markers=['o','v'], legend=False)
# placing the legend up
g.axes[0][0].legend(loc=1)
#showing graph
plt.show()

the graph


вы можете попробовать следующее:

h = plt.gca().get_lines()
lg = plt.legend(handles=h, labels=['YOUR Labels List'], loc='best')

это сработало отлично со мной.