2016-08-04 94 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