首页 > 解决方案 > 是否可以更改使用 FacetGrid.add_legend() 创建的图例的列数?

问题描述

下面的代码创建了一个 facegrid 的图例并将其放置在上面:

g = sns.FacetGrid(df, col="col", col_wrap=2, hue='key')
g = g.map(sns.lineplot, 'x', 'y')
g.add_legend()
g._legend.set_bbox_to_anchor((0.5, 1.05))

有没有办法控制数字列?它有一个_ncol属性,但我还没有看到改变它的方法。手动更改它并不能完成这项工作。

标签: seaborn

解决方案


add_legend在 seaborn 源代码中找到了 的定义。它接受**kwargs并将它们交给self.figure.legend(...)or ax.legend(...)

所以可以简单地ncol=2作为参数传递。这也应该是一个更好的方法是通过使用loc和/或bbox_to_anchor参数来定义图例的位置。

这是一个例子:

import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="sex", hue="smoker")
g.map(sns.scatterplot, "total_bill", "tip", alpha=.7)
g.add_legend(ncol=2, bbox_to_anchor=(0.5,1.05));

推荐阅读