更改 Seaborn 散点图中的图例位置和标签

Posted

技术标签:

【中文标题】更改 Seaborn 散点图中的图例位置和标签【英文标题】:Change legend location and labels in Seaborn scatter plot 【发布时间】:2019-07-08 00:17:00 【问题描述】:

我想在 Seaborn 散点图中更改我的图例的位置和标签。这是我的代码:

ax_total_message_ratio=sns.scatterplot(x='total_messages', y='email_messages_ratio',hue='poi',data=df_new)
ax_total_message_ratio.set_title("Email Messages Ratio vs. Total Messages Across Poi",y=1.12,fontsize=20,fontweight='bold')
ax_total_message_ratio.set_ylabel('Email Messages Ratio')
ax_total_message_ratio.set_xlabel('Total Messages')
ax_total_message_ratio.legend.loc("lower right")
put.show()

但我收到以下错误消息; 'function' object has no attribute 'loc'。我能获得一些关于如何使用 Seaborn 控制图例的帮助吗?此外,我还需要在图例标签中将 0 替换为 No 并将 1 替换为 Yes。谢谢

【问题讨论】:

你试过ax_total_message_ratio.legend(loc="lower right")吗? @WilliamMiller,感谢您的澄清。它确实帮助我解决了位置问题。但是我可以获得有关如何更改标签的任何指导吗?感谢您的帮助 我很好奇 0 和 1 最初是如何进入传奇的。你用的是哪个seaborn版本? (我之所以这样问,是因为我无法构建一个像上面的图例中包含数字但分类颜色的图) @ImportanceOfBeingErnest 我正在使用 Seaborn heron 0.9.0。希望对您有所帮助 【参考方案1】:

你可以在调用legend()时使用loc关键字调整位置,比如

ax_total_message_ratio.legend(loc="lower right")

要为您的标记添加自定义标签,您可以创建自定义图例,即

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

custom = [Line2D([], [], marker='.', color='b', linestyle='None'),
          Line2D([], [], marker='.', color='r', linestyle='None')]

fig = plt.figure(figsize=(8,5))

plt.legend(custom, ['Yes', 'No'], loc='lower right')
plt.show()

这会给你

并且应该移除自动生成的图例,只留下自定义图例。

【讨论】:

感谢您的帮助。它解决了我的问题。附带说明,标题poi 不再可见。但那是次要的。为了读者的清楚,我重新标记为poinon-poi。高度赞赏。 @jayant 您可以在plt.legend() 中添加标题作为关键字参数title="title" 太好了。我搞定了。请注意,我们似乎也可以使用轴对象来使用legend 属性,即ax_total_message_ratio.legend(custom,['Non-Poi','Poi'],title="POI"),就像您建议的plt.legend 一样。了解这两项工作很有帮助。只是一个注释。非常感谢你。 @jayant 是的,您可以在轴对象上调用legend(正如我在开头所说的那样)-我在示例中任意使用了plt.legend() @jjrr 恐怕没有看到整个代码 - 你有你正在使用的代码的链接(例如在 GitHub 上)吗?如果不是,也许您应该打开一个新问题并包含代码【参考方案2】:

您可以使用便捷的方法 get_legend_handles_labels() 来获取标签的句柄和文本:

ax=sns.scatterplot(x='total_messages', y='email_messages_ratio',hue='poi',data=df_new)

handles, labels  =  ax.get_legend_handles_labels()

ax.legend(handles, ['Yes', 'No'], loc='lower right')

【讨论】:

以上是关于更改 Seaborn 散点图中的图例位置和标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在 seaborn 散点图中编辑多个图例框?

Seaborn 散点图

带编号的点标签和散点图中的图例

使用 seaborn 在 x y 散点图中添加标签

Pandas Matplotlib:如何更改散点图中图例的形状和大小?

R语言散点图可视化:自定义标题和标签拟合回归线lowess为散点图添加平滑拟合线修改散点图中点颜色和点符号分组散点图添加图例pairs可视化散点图矩阵ggplt2可视化lattice