说我有这个数据框df:

structure(list(max.diff = c(6.02, 7.56, 7.79, 7.43, 7.21, 7.65,
8.1, 7.35, 7.57, 9.09, 6.21, 8.2, 6.82, 7.18, 7.78, 8.27, 6.85,
6.72, 6.67, 6.99, 7.32, 6.59, 6.86, 6.02, 8.5, 7.25, 5.18, 8.85,
5.44, 6.44, 7.85, 6.25, 9.06, 8.19, 5.08, 6.26, 8.92, 6.83, 6.5,
7.55, 7.31, 5.83, 5.55, 4.29, 8.29, 8.72, 9.5)), class = "data.frame", row.names = c(NA,
-47L), .Names = "max.diff")

我想使用ggplot2将其绘制为密度图:
p <- ggplot(df, aes(x = max.diff))
p <- p + geom_histogram(stat = "density")
print(p)

这使,

r - ggplot2,直方图:为什么y = ..density ..和stat =“density”不同?-LMLPHP

现在,一个天真的问题:为什么没有给出相同的结果?
p <- ggplot(df, aes(x = max.diff))
p <- p + geom_histogram(aes(y = ..density..))
print(p)

r - ggplot2,直方图:为什么y = ..density ..和stat =“density”不同?-LMLPHP

是因为选择了binwidth还是bins的数量或其他一些参数?到目前为止,我还无法调整这些参数以使其相同。还是我正在绘制一些完全不同的东西?

最佳答案

第二个示例是重新缩放直方图计数,以使条形区域积分为1,但与标准ggplot2直方图相同。您可以使用binsbinwidth参数调整条形数量。

第一个示例是计算内核密度估计值,并将输出(每个x值处的估计密度)绘制为直方图。您可以使用adjust参数更改密度估计的平滑量,以及使用n参数更改密度计算的点数。
geom_histogram的默认值为bins=30stat="density"的默认值为adjust=1n=512(stat="density"使用density函数生成值)。 stat="density"输出比直方图输出要平滑得多,这是因为density选择密度估计的带宽。减少adjust参数可减少平滑量。

下面的前两个示例是您的绘图。后两个使用对各自参数的调整来获得两个大致相似的图,尽管它们并不完全相同,因为内核密度估计仍在平滑输出。这仅用于说明。核密度估计和直方图是两个与思想相关的不同事物。

ggplot(df, aes(x = max.diff)) +
  geom_histogram(stat = "density") +
  ggtitle("stat='density'; default paramters")

ggplot(df, aes(x = max.diff)) +
  geom_histogram(aes(y = ..density..), colour="white") +
  ggtitle("geom_histogram; default parameters")

ggplot(df, aes(x = max.diff)) +
  geom_histogram(stat = "density", n=2^5, adjust=0.1) +
  ggtitle("stat='density'; n=2^5; Adjust=0.1")

ggplot(df, aes(x = max.diff)) +
  geom_histogram(aes(y = ..density..), bins=2^5, colour="white") +
  ggtitle("geom_histogram; bins=2^5")

r - ggplot2,直方图:为什么y = ..density ..和stat =“density”不同?-LMLPHP

关于r - ggplot2,直方图:为什么y = ..density ..和stat =“density”不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46734555/

10-11 04:18