如何解释不同的ggplot2密度?

18 r ggplot2

我对geom_densityggplot中以下变种的含义感到困惑:

有人可以解释这四个电话之间的区别:

  1. geom_density(aes_string(x=myvar))
  2. geom_density(aes_string(x=myvar, y=..density..))
  3. geom_density(aes_string(x=myvar, y=..scaled..))
  4. geom_density(aes_string(x=myvar, y=..count../sum(..count..)))

我的理解是:

  • geom_density 单独产生密度,其曲线下面积总和为1
  • geom_density..density..基本相同...?
  • ..count../sum(..count..)将正常化峰高更像一个标准化直方图,以确保所有的高度之和为1
  • 如果..count..没有分母,则只需将每个bin乘以其中的项目数
  • ..scaled..参数将使它这样的密度的最大值为1.

我发现..scaled..非常违反直觉,如果我对它的解释是正确的,我从未见过它,所以我想忽略它.我主要是在寻找澄清之间的差异geom_density和一种归一化密度图,我假设需要...count../...参数.谢谢.

(相关:ggplot2将变量映射到y并使用stat ="bin"时出错)

mne*_*nel 12

stat_densityis 的默认美学,默认情况下将默认使用默认情况下..density..调用的调用.geom_densitystat_densityy = ..density..

您可以通过查看源代码来查看各列的计算方式

..scaled.. 被定义为

densdf$scaled <- densdf$y / max(densdf$y, na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)

如果您愿意,请随意忽略它.

查看stat_bin源代码

结果如此计算

res <- within(results, {
    count[is.na(count)] <- 0
    density <- count / width / sum(abs(count), na.rm=TRUE)
    ncount <- count / max(abs(count), na.rm=TRUE)
    ndensity <- density / max(abs(density), na.rm=TRUE)
  })
Run Code Online (Sandbox Code Playgroud)

因此,如果你想比较geom_histogram(使用默认值stat = 'bin')的结果,那么你可以设置y = ..density..它,它将count / sum(count)为你计算(计算箱的宽度)

如果你想比较geom_density(aes(y=..scaled..))stat_bin,那么你可以使用geom_histogram(aes(y = ..ndensity..))

您也可以通过同时使用它们来获得相同的比例..count..,但是您需要调整adjust参数stat_density以获得曲线的适当详细的近似值.