21

我对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_densitywith..density..基本上是一样的...?
  • 会将峰高归一化,..count../sum(..count..)使其更像归一化直方图,确保所有高度总和为 1
  • 没有分母的..count..它本身只会将每个 bin 乘以其中的项目数
  • ..scaled..参数将使密度的最大值为1。

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

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

4

1 回答 1

12

的默认美学stat_density是,因此默认使用..density..的调用将默认绘制。geom_densitystat_densityy = ..density..

通过查看源代码可以看到各个列是如何计算的

..scaled..定义为

densdf$scaled <- densdf$y / max(densdf$y, na.rm = TRUE)

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

查看 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)
  })

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

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

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

于 2013-03-28T01:20:14.233 回答