2015-02-12 1 views
4

Seaborn, для некоторых особых случаев список в легенде может отличаться от порядка построения. Например, следующий код:seaborn factorplot: set series порядок отображения в легенде

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

Там может быть более изящным обходной путь, но основная проблема - известная проблема в морском море: https://github.com/mwaskom/seaborn/issues/340 – mwaskom

ответ

5

Я думаю, что вы ищете, 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) 
2

Я просто наткнулся на эту старенькая пост. Единственный ответ, похоже, не работает для меня, но я нашел более удовлетворительное решение для изменения порядка легенд. Хотя в ваших примерах легенды установлены правильно для меня, можно изменить Ordre через add_legend() метод:

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)) 
Смежные вопросы