2016-08-04 3 views
1

У меня есть следующий код:Как переместить легенду в Seaborn FacetGrid за пределами участка?

g = sns.FacetGrid(df, row="Type", hue="Name", size=3, aspect=3) 
g = g.map(sns.plt.plot, "Volume", "Index") 
g.add_legend() 
sns.plt.show() 

Это приводит к следующему сюжету:

enter image description here

Как я могу переместить легенду вне сюжета?

+1

Попробуйте использовать другой Matplotlib бэкенд. Я думаю, вы столкнулись с ошибкой в ​​Mac OSX. – mwaskom

+0

@mwaskom, это похоже на то, спасибо. –

ответ

0

Согласно комментарий mwaskom в выше, это ошибка в OS X. Действительно, переключение на другой бэкэнд решает проблему.

Например, я это в моем matplotlibrc:

backend : TkAgg # use Tk with antigrain (agg) rendering 
3

Вы можете сделать это путем изменения размеров участков:

g = sns.FacetGrid(df, row="Type", hue="Name", size=3, aspect=3) 
g = g.map(sns.plt.plot, "Volume", "Index") 
for ax in g.axes.flat: 
    box = ax.get_position() 
    ax.set_position([box.x0,box.y0,box.width*0.9,box.height]) 

sns.plt.legend(loc='center left',bbox_to_anchor=(1,0.5)) 
sns.plt.show() 

Пример:

import seaborn as sns 

tips = sns.load_dataset('tips') 

# more informative values 
condition = tips['smoker'] == 'Yes' 
tips['smoking_status'] = '' 
tips.loc[condition,'smoking_status'] = 'Smoker' 
tips.loc[~condition,'smoking_status'] = 'Non-Smoker' 

g = sns.FacetGrid(tips,row='sex',hue='smoking_status',size=3,aspect=3) 
g = g.map(plt.scatter,'total_bill','tip') 
for ax in g.axes.flat: 
    box = ax.get_position() 
    ax.set_position([box.x0,box.y0,box.width*0.85,box.height]) 

sns.plt.legend(loc='upper left',bbox_to_anchor=(1,0.5)) 
sns.plt.show() 

Результаты в:

enter image description here

Смежные вопросы