具有相对频率或密度曲线的计数图

2024-09-27 21:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将三组(色调)数据的分类数据可视化。使用seaborn,似乎countplot()可以做到这一点(下面文档链接中的第二个示例类似于我需要的)。但不是在y轴上计数,有没有可能按组计算这个比例?你知道吗

在链接的第二个示例中,第一、第二和第三类中的人组(蓝色条)分别约为22%、18%、60%,而不是计数。妇女和儿童群体也将如此。你知道吗

Seaborn Example


Tags: 数据文档示例链接可视化分类seaborn色调
1条回答
网友
1楼 · 发布于 2024-09-27 21:25:37

据我所知,这在Seaborn中不是一个直接的选项,但是您可以手动创建一个比例计数数据集并用sns.barplot绘图:

df = sns.load_dataset('titanic')
# [1] Simple count
sns.countplot(x='class', data=df)
plt.show()
# [1B] By percent
pct = df['class'].value_counts(normalize=True).reset_index().rename({'index':'class','class':'percent'}, axis=1)
sns.barplot(x='class', y='percent', data=pct)
plt.show()

# [2] Two var count
sns.countplot(x='class', hue='who', data=df)
plt.show()
# [2b] By percent
pct2 = (df.groupby(['class','who']).size() / df.groupby(['class']).size()).reset_index().rename({0:'percent'}, axis=1)
sns.barplot(x='class', hue='who', y='percent', data=pct2)
plt.show()

enter image description here

enter image description here


按评论编辑

通过更改用于计算pct数据帧的分数的分母,您可以很容易地修改正在计算的百分比。你知道吗

# [3] Grouped by 'class'; hue by 'who'
# IIUC, this is what you're asking for
pct3 = (df.groupby(['class','who']).size() / df.groupby(['who']).size()).reset_index().rename({0:'percent'}, axis=1)
sns.barplot(x='class', hue='who', y='percent', data=pct3)
plt.show()

enter image description here

您还可以通过交换huex命令中的参数来更改分组。在我看来,第二种选择更直观一些。你知道吗

# [3b] Grouped by 'who'; hue by 'class'
# In my view, this is a bit more intuitive; each grouping sums to 100%, 
# and you can compare across class for men, women, and children more easily
sns.barplot(x='who', hue='class', y='percent', data=pct3)
plt.show()

enter image description here

相关问题 更多 >

    热门问题