说我有这个数据框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
的数量还是其他一些参数?到目前为止,我还没有能够调整这些参数以使它们相同。或者我在绘制一些完全不同的东西?
答案 0 :(得分:2)
第二个示例是重新缩放直方图计数,以便条形区域与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")