Lmplot seaborn中每种色调的不同标记

时间:2017-11-21 15:55:49

标签: pandas matplotlib seaborn

你如何设置你的lmplot,使你不仅每个变量都有不同的色调,还有不同的标记?

例如,根据哪个'类别'您将如何为这些点获得不同的标记?他们属于?

import pandas as pd
import seaborn as sns
dic={"A":[4,6,5], "B":[2,7,5], "category":['A','A',"B"]}
df=pd.DataFrame(dic)
sns.lmplot('A', 'B', data=df, hue='category', fit_reg=False)]

我一直试图传递一个列表,例如:

marker_cycle=['o', 'x', '^']
[next(marker_cycle) for i in df["category"].unique()

但尚未成功。

3 个答案:

答案 0 :(得分:2)

markers

中有sns.lmplot
sns.lmplot('A', 'B', data=df, hue='category', fit_reg=False,markers=['o', 'x'])

enter image description here

答案 1 :(得分:0)

this issuenext()需要使用迭代器。您可以使用intertools

创建一个
import itertools
mks = itertools.cycle(['o', 'x', '^', '+', '*', '8', 's', 'p', 'D', 'V'])
markers = [next(mks) for i in df["category"].unique()]

示例:

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

dic={"A":[4,6,5], "B":[2,7,5], "category":['A','A',"B"]}
df=pd.DataFrame(dic)

import itertools
mks = itertools.cycle(['o', 'x', '^', '+', '*', '8', 's', 'p', 'D', 'V'])
markers = [next(mks) for i in df["category"].unique()]

sns.lmplot('A', 'B', data=df, hue='category', markers=markers, fit_reg=False)

plt.show()

请注意,这可能有点矫枉过正,您可以直接从列表中获取标记,

marker = ['o', 'x', '^', '+', '*', '8', 's', 'p', 'D', 'V']
markers = [marker[i] for i in range(len(df["category"].unique()))]

完整示例:

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

dic={"A":[4,6,5], "B":[2,7,5], "category":['A','A',"B"]}
df=pd.DataFrame(dic)

marker = ['o', 'x', '^', '+', '*', '8', 's', 'p', 'D', 'V']
markers = [marker[i] for i in range(len(df["category"].unique()))]

sns.lmplot('A', 'B', data=df, hue='category', markers=markers, fit_reg=False)

plt.show()

上述两种解决方案都会产生相同的情节:

enter image description here

答案 2 :(得分:0)

也许添加style ='category'

sns.lmplot('A', 'B', data=df, hue='category', style='category', fit_reg=False)]