【问题标题】:How to show the y-axis of seaborn displot as percentage如何将 seaborn 分布的 y 轴显示为百分比
【发布时间】:2021-12-22 03:06:42
【问题描述】:

我正在使用 seaborn.displot 显示一组参与者的分数分布。

是否可以让 y 轴显示实际百分比(示例如下)?

这是受众对数据的要求。 目前它是在 excel 中完成的,但在 python 中会更有用。

import seaborn as sns

data = sns.load_dataset('titanic')

p = sns.displot(data=data, x='age', hue='sex', height=4, kind='kde')

所需格式

【问题讨论】:

  • 请举例说明您的数据的外观以及您到目前为止所做的尝试
  • 好吧,您不能将 y 轴视为百分比,它是 density。密度可以任意高或低,具体取决于 x 轴。将其格式化为百分比是错误的。

标签: python matplotlib statistics seaborn histogram


【解决方案1】:

kind='hist': seaborn.histplot

  • 使用stat='percent' → 可从seaborn 0.11.2 获得
import seaborn as sns
from matplotlib.ticker import PercentFormatter

data = sns.load_dataset('titanic')

p = sns.displot(data=data, x='age', stat='percent', hue='sex', height=4, kde=True, kind='hist')

按照说明,请勿执行以下操作

kind='kde': seaborn.kdeplot

  • 根据seaborn的创建者mwaskom:您可以将百分比格式化程序包裹在密度值周围(如下代码所示),但这是不正确的,因为密度不是比例(您最终可能会得到 > 100% 的值)。
  • 根据JohanC,您不能以百分比形式查看y 轴,它是density。密度可以任意高或低,具体取决于 x 轴。 将其格式化为百分比是错误的。
  • 我将把这作为答案的一部分作为解释,否则只会由其他人发布。
  • 使用matplotlib.ticker.PercentFormatter 转换坐标轴值。
import seaborn as sns
from matplotlib.ticker import PercentFormatter

data = sns.load_dataset('titanic')

p = sns.displot(data=data, x='age', hue='sex', height=3, kind='kde')

p.axes.flat[0].yaxis.set_major_formatter(PercentFormatter(1))

【讨论】:

    【解决方案2】:

    正如@JohanC 所说,KDE 的 y 轴是density,而不是比例,因此将其转换为百分比没有意义。

    你有两个选择。一种方法是在直方图上绘制 KDE 曲线,直方图计数以百分比表示:

    sns.displot(
        data=tips, x="total_bill", hue="sex",
        kind="hist", stat="percent", kde=True,
    )
    

    但是您的“所需图”实际上根本不像密度,它看起来像用线而不是条形绘制的直方图。您可以通过element="poly" 获得:

    sns.displot(
        data=tips, x="total_bill", hue="sex",
        kind="hist", stat="percent", element="poly", fill=False,
    )
    

    【讨论】:

    • 这对您有很大帮助,谢谢!在阅读您的答案时,很明显我没有正确地提出问题。我应该要求一个直方图,但用线条而不是条形图,百分比在 y 轴上。感谢您的专业知识!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2015-09-30
    相关资源
    最近更新 更多