以下代码产生以下输出。
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")
我想知道每个面板中使用了多少个观察值 (N),并且如果可能的话,我想在每个面板中显示它们。有人知道如何做到这一点吗?
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()
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 有点太小,无法与我的情况下的数据重叠。