无法访问用于数据规范化的 sns.histplot() 的图例

No access to legend of sns.histplot() used with data normalisation

我在使用 seaborn 创建百分比直方图时遇到了很多困难,最近,我遇到了 this post on github,这正是我要找的东西。参数 stat='probability' 规范化数据 stat='frequency' 将给出相同的结果) 并输出所需的图。重现 post 的最后一条评论的示例,这里是图表:

tips = sns.load_dataset("tips")
sns.histplot(tips, x="day", hue="sex", stat="probability", multiple="fill", shrink=.8)

是否可以将图例移出? 我似乎无法访问已尝试使用 ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left') 的图例,这会使标签消失。如果我尝试创建新标签,我不会得到 hue 强加的颜色差异。

我更喜欢避免艺术家或重塑原始数据框以使用 matplotlib。 因此,非常欢迎任何意见!

由于 seaborn 创建了更多涉及的图例,而 matplotlib 不提供简单的 API 来操纵现有图例,因此移动特定图例的方式可能因情况而异。

在这种情况下,您可以访问现有图例的句柄和标签,并使用它们在所需位置创建新图例。

import matplotlib.pyplot as plt
import seaborn as sns

tips = sns.load_dataset("tips")
ax = sns.histplot(tips, x="day", hue="sex", stat="probability", multiple="fill", shrink=.8)
ax.legend(handles=ax.legend_.legendHandles, labels=[t.get_text() for t in ax.legend_.texts],
          title=ax.legend_.get_title().get_text(),
          bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()