据我所知,这不是 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()
每条评论的编辑次数
您可以通过更改用于计算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()
您还可以通过交换sns.boxplot 命令中的hue 和x 参数来更改分组。在我看来,第二个选项更直观一些。
# [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()