2016-08-04 53 views
1

Ich habe den folgenden Code:Wie verschiebe ich die Legende in Seaborn FacetGrid außerhalb der Handlung?

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() 

Daraus ergibt sich die folgende Handlung:

enter image description here

Wie kann ich die Legende außerhalb des Grundstücks zu bewegen?

+1

Versuchen Sie ein anderes matplotlib Backend verwenden. Ich denke, Sie haben einen Fehler im Mac OSX-Backend festgestellt. – mwaskom

+0

@mwaskom, das scheint der Fall zu sein, danke. –

Antwort

0

Nach mwaskom Kommentar oben, ist dies ein Fehler in OS X. Tatsächlich löst das Umschalten auf ein anderes Backend das Problem.

Zum Beispiel, habe ich dies in meiner matplotlibrc:

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

Sie können dies tun, indem Sie die Plots Ändern der Größe:

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() 

Beispiel:

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() 

Ergebnisse in:

enter image description here