seaborn中的图例重叠绘图区域[重复]

Posted

技术标签:

【中文标题】seaborn中的图例重叠绘图区域[重复]【英文标题】:legend overlapping plot area in seaborn [duplicate] 【发布时间】:2019-04-07 06:36:43 【问题描述】:

我使用 seaborn 制作了上面的情节,但我无法将图例正确放置在情节之外。请注意,图例在图像的右侧被切断。这是它的真实外观,我没有手动切割它。这是我正在使用的代码:

sns.lineplot(x="Time", y='Anomaly', style='country', hue='region', size='area', sizes=(1., 4), data=df)
# Put the legend out of the figure
plt.subplots_adjust(right=0.2)
plt.legend(bbox_to_anchor=(.95, 1), loc=2, borderaxespad=0.)
plt.tight_layout()
plt.show()

-- 编辑:

这里是复制此问题的数据: https://www.dropbox.com/s/w4gd447e22zb5yk/subset.csv?dl=0

【问题讨论】:

有关如何将图例置于绘图之外的详细指南,请参阅this answer。在这里,您将图例放置在轴大小的 95% 处。但是,要使其超出坐标轴,您需要使用 100% 或更多。因此bbox_to_anchor=(1, 1) 甚至(1.02, 1) 可能是个好主意。 感谢@ImportanceOfBeingErnest,当我执行 1.05 时,图例甚至不再可见 这就是我将其标记为重复的原因。特别是,this answer 的“后处理”部分解释了可能的解决方案。 @ImportanceOfBeingErnest,即使在进行后处理之后,例如subplots_adjust,图例部分不可见 所以如果你使用例如subplots_adjust(right=0.8) 并且图例仍然部分隐藏,您将需要尝试 right=0.7 接下来看看会发生什么,直到您满意为止。如果您发现自己需要低于 0.5 的值,您可以考虑在图例中使用较短的标签或增加图形宽度。 【参考方案1】:

您没有为我们指定一个样本集来测试实现并生成绘图,但是通过玩具初始化,修改bbox_to_anchor 似乎可以解决问题。见matplotlib's legend guide。

bbox_to_anchor 控制手动图例放置。将其设置为(1,1) 会将其置于右上角。

plt.legend(bbox_to_anchor=(1, 1), loc=2, borderaxespad=0.)

样图经过修改:

【讨论】:

以上是关于seaborn中的图例重叠绘图区域[重复]的主要内容,如果未能解决你的问题,请参考以下文章

多个重叠图的 Seaborn 图例修改

使用 *args 和 seaborn 绘图时如何显示所有图例

无法在 seaborn distplot 中显示图例

放置 MATLAB 图例,使其不会在绘图上重叠

将 seaborn 情节图例移动到不同的位置

使用 for 循环绘图时,如何跳过图例中的重复标签?