无法访问用于数据规范化的 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()
我在使用 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()