如何将 Seaborn FacetGrid 中的图例移到情节之外

Flo*_*use 4 python plot seaborn

我有以下代码:

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()
Run Code Online (Sandbox Code Playgroud)

这导致以下情节:

在此处输入图片说明

如何将图例移到情节之外?

ber*_*nie 5

您可以通过调整绘图大小来做到这一点:

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()
Run Code Online (Sandbox Code Playgroud)

例子:

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()
Run Code Online (Sandbox Code Playgroud)

结果是:

在此处输入图片说明

  • 模块“seaborn”没有属性“plt”。过时的? (3认同)
  • 不,这对于seaborn 0.10.0 来说还不够。Matplotlib 找不到“带有找到放入图例中的标签的句柄”。必须使用“g._legend”。 (2认同)

Flo*_*use 0

根据上面 mwaskom 的评论,这是 OS X 中的一个错误。确实切换到另一个后端解决了这个问题。

例如,我将其放入我的matplotlibrc

backend : TkAgg   # use Tk with antigrain (agg) rendering
Run Code Online (Sandbox Code Playgroud)