geom_histogram: 第一个箱子的默认来源是什么?
geom_histogram: What is the default origin of the first bin?
我想知道使用 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)
默认情况下,直方图以 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
我想知道使用 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)
默认情况下,直方图以 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