【问题标题】:geom_histogram: What is the default origin of the first bin?geom_histogram:第一个 bin 的默认原点是什么?
【发布时间】:2016-01-03 21:09:04
【问题描述】:

我想知道使用ggplot2 为给定的 bin 宽度创建的直方图中第一个 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)

【问题讨论】:

    标签: r ggplot2 histogram


    【解决方案1】:

    默认情况下,直方图以 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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2016-08-26
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多