如何解释不同的ggplot2密度?

时间:2013-03-27 16:32:24

标签: r ggplot2

我对ggplot中geom_density的以下变体的含义感到困惑:

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

  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..)))
  5. 我的理解是:

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

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

    (相关:Error with ggplot2 mapping variable to y and using stat="bin"

1 个答案:

答案 0 :(得分:10)

stat_density的默认美学为..density..,因此默认使用geom_density的{​​{1}}调用默认情况下会stat_density

您可以通过查看source code

来查看各列的计算方式

y = ..density..定义为

..scaled..

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

查看source code for stat_bin

结果按此计算

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

因此,如果您想比较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)geom_density(aes(y=..scaled..))进行比较,那么您可以使用stat_bin

您也可以在两者中使用geom_histogram(aes(y = ..ndensity..))来获得相同的比例,但是您需要调整..count..中的adjust参数以获得相应的详细近似值曲线。