说我有这个数据框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)
这使,
现在,一个天真的问题:为什么没有给出相同的结果?
p <- ggplot(df, aes(x = max.diff))
p <- p + geom_histogram(aes(y = ..density..))
print(p)
是因为选择了
binwidth
还是bins
的数量或其他一些参数?到目前为止,我还无法调整这些参数以使其相同。还是我正在绘制一些完全不同的东西? 最佳答案
第二个示例是重新缩放直方图计数,以使条形区域积分为1,但与标准ggplot2直方图相同。您可以使用bins
或binwidth
参数调整条形数量。
第一个示例是计算内核密度估计值,并将输出(每个x值处的估计密度)绘制为直方图。您可以使用adjust
参数更改密度估计的平滑量,以及使用n
参数更改密度计算的点数。geom_histogram
的默认值为bins=30
。 stat="density"
的默认值为adjust=1
和n=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”不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46734555/