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

Nus*_*sig 4 r histogram ggplot2

我想知道ggplot2为给定的bin宽度创建的直方图中第一个bin的默认原点.不幸的是,我没有找到在帮助页面的任何信息geom_histogram,geom_bar以及stat_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)
Run Code Online (Sandbox Code Playgroud)

jer*_*ycg 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)
Run Code Online (Sandbox Code Playgroud)

我们可以通过以下方式获得突破:

x1 <- ggplot_build(p)$data
Run Code Online (Sandbox Code Playgroud)

给我们休息时间:

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
Run Code Online (Sandbox Code Playgroud)

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

binwidth*(floor((min(x)-binwidth/2)/binwidth)+0.5)
-2.476487
Run Code Online (Sandbox Code Playgroud)

类似地,最大值是:

binwidth*(ceiling((max(x)+binwidth/2)/binwidth)+0.5)
2.095489
Run Code Online (Sandbox Code Playgroud)