geom_histogram:第一个bin的默认原点是什么?

时间:2015-10-06 19:59:21

标签: r ggplot2 histogram

我想知道对于给定的bin宽度,使用ggplot2创建的直方图中第一个bin的默认原点。很遗憾,我在geom_histogramgeom_barstat_bin的帮助页面上找不到任何信息。请在下面找到包含ggplot2的直方图的最小示例。

 library(ggplot2)
 x <- rnorm(25)
 binwidth <- (range(x)[2]-range(x)[1])/10
 ggplot(data.frame(x=x), aes(x = x)) +
   geom_histogram(aes(y = ..density..), binwidth = binwidth)

1 个答案:

答案 0 :(得分:5)

默认情况下,直方图以0为中心,第一个条xlimits位于0.5*binwidth-0.5*binwidth。从那里开始,条形图在两个方向上继续width = binwidth,直到它们达到最小值和最大值。或者,如果您的数据全部是> 0,它们从包含数据的第一个(x+0.5)*binwidth开始。

对于您的示例(使用set.seed进行再现):

set.seed(1)
x <- rnorm(25)
binwidth <- (range(x)[2]-range(x)[1])/10
p <- ggplot(data.frame(x=x), aes(x = x)) +
   geom_histogram(aes(y = ..density..), binwidth = binwidth)

我们可以通过使用:

来解决问题
x1 <- ggplot_build(p)$data

给我们休息时间:

x1[[1]]$x
 [1] -2.4764874 -2.0954894 -1.7144913 -1.3334932 -0.9524952 -0.5714971 -0.1904990  0.1904990  0.5714971
[10]  0.9524952  1.3334932  1.7144913  2.0954894

因此,为了达到最小值,我们需要将数据的最低值舍入为binwidth + 0.5的倍数(注意,我确定有更好的公式,但这样可行):

binwidth*(floor((min(x)-binwidth/2)/binwidth)+0.5)
-2.476487

类似地,最大值是:

binwidth*(ceiling((max(x)+binwidth/2)/binwidth)+0.5)
2.095489