Seaborn 显示每个面板中的观察数量

问题描述 投票:0回答:2

以下代码产生以下输出。

import seaborn as sns
penguins = sns.load_dataset("penguins")
sns.displot(data=penguins, x="flipper_length_mm", y="bill_length_mm", col="species", row="sex")

img

我想知道每个面板中使用了多少个观察值 (N),并且如果可能的话,我想在每个面板中显示它们。有人知道如何做到这一点吗?

python seaborn
2个回答
1
投票

您可以使用

g.map_dataframe(func)
,其中
func
是用户定义的并接收两个参数:颜色(以允许一致的着色)和
data
,用于此子图的数据帧的子集。每次调用
func
时,matplotlib 的“当前 ax”将被设置为特定的子图。
plt.gca()
可以访问该
ax

这是一个通过“轴坐标”添加子集长度的示例

import matplotlib.pyplot as plt import seaborn as sns def show_counts(color, data): ax = plt.gca() ax.text(0.5, 0.95, f'Count: {len(data)}', ha='center', color=color, transform=ax.transAxes) penguins = sns.load_dataset("penguins") g = sns.displot(data=penguins, x="flipper_length_mm", y="bill_length_mm", col="species", row="sex") g.map_dataframe(show_counts) plt.show()

adding text to displot


0
投票
JohanC 的答案是正确的,但不适用于

hue

。我想添加评论,但没有足够的声誉:以下内容适用于:

label_map = {} label_val = 0.25 def show_counts(color, data, label): global label_map global label_val ax = plt.gca() if label not in label_map: label_map[label] = label_val label_val += .5 ax.text(label_map[label], 0.98, f'Count: {len(data)}', ha='center', color=color, transform=ax.transAxes) g = sns.FacetGrid(data, hue="direction", col="encounter", height=4).map(plt.scatter, "damage", "month").add_legend() g.map_dataframe(show_counts) plt.show()
这假设你的色调中有两件事(否则如何修复应该相当清楚)。我还发现 y 位置的 0.95 有点太小,无法与我的情况下的数据重叠。

© www.soinside.com 2019 - 2024. All rights reserved.