Seaborn,对于某些特殊情况,图例中的列表顺序可能与绘图顺序不同。例如,以下代码:
df = pds.DataFrame({'group': [-2,-1,0] * 5, 'x' : range(5) * 3, 'y' : range(15)})
sbn.factorplot(kind = 'point', x = 'x', y= 'y', hue = 'group', data = df)
绘图序列在[-2,-1,0]的组中,但图例按[-1,-2,0]的顺序列出。 (前两个交换,可能是由于内部按字符串排序而不是数字)。我目前的解决方法是在factorplot中禁用图例,然后使用matplotlib语法放置图例。只是想知道是否有一种比我的解决方法更好的方法。
答案 0 :(得分:7)
我认为您正在寻找的是hue_order = [-2, -1, 0]
df = pd.DataFrame({'group': ['-2','-1','0'] * 5, 'x' : range(5) * 3, 'y' : range(15)})
sns.factorplot(kind = 'point', x = 'x', y= 'y', hue_order = ['-2', '-1', '0'], hue = 'group', data = df)
答案 1 :(得分:3)
我偶然发现了这个古老的帖子。唯一的答案似乎并不适合我,但我找到了一个更令人满意的解决方案来改变传奇顺序。
虽然在您的示例中为我设置了正确的图例,但可以通过add_legend()
方法更改ordre:
df = pd.DataFrame({'group': [-2,-1,0] * 5, 'x' : range(5) * 3, 'y' : range(15)})
ax = sns.factorplot(kind = 'point', x = 'x', y= 'y', hue = 'group', data = df, legend = False)
ax.add_legend(label_order = ['0','-1','-2'])
对于自动数字排序:
ax.add_legend(label_order = sorted(ax._legend_data.keys(), key = int))