【问题标题】:Specifying exact bin range in geom_histogram在 geom_histogram 中指定准确的 bin 范围
【发布时间】:2019-02-07 10:04:22
【问题描述】:

我有一个数据集,其中包含一天中特定时间发生的事件。我想制作每小时事件的直方图。我抬头一望 R - emulate the default behavior of hist() with ggplot2 for bin widthR hist vs geom_hist break points 这让我走到了这一步,但这仍然不是我想要的。我试过这个:

library(ggplot2)
set.seed(1)
df1 = data.frame(t=as.integer(rnorm(100, 25, 8)) / 2) %% 24
ggplot(data=df1, aes(x=t)) +
  geom_histogram(binwidth=1, colour="steelblue4", fill="steelblue") +
  stat_bin(binwidth = 1, aes(label=..count..), vjust=-0.5, geom = "text") +
  scale_x_continuous("Time",
    breaks=seq(0, 23, by=4),
    labels=c("00:00", "04:00", "08:00", "12:00", "16:00", "20:00")) +
  scale_y_continuous(breaks = 0:15)

得到了这张图片:

这个直方图 1) 不正确,2) 没有显示我想要的。直方图给人的印象是在 04:00(或前后)有两个事件。当我们查看数据时,我们看到在 3.5(即 03:30)和 4.5(04:30)有一个事件。我真正想要的是显示 [00:00, 01:00)、[01:00, 02:00) ... [23:00, 24:00) 范围内事件数量的直方图。应该将 03:30 的事件分配到与 04:30 的事件不同的 bin。另外,我希望直方图跨越一整天,从 00:00 到 24:00。像这样的东西(photoshopped!):

一致
Time <- cut(df1$t, breaks = 0:24, dig.lab = 4, right = FALSE) 
as.data.frame(table(Time))

      Time Freq
1    [0,1)    0
2    [1,2)    0
3    [2,3)    0
4    [3,4)    1
5    [4,5)    1
6    [5,6)    1
7    [6,7)    3
8    [7,8)    4
9    [8,9)    2
10  [9,10)    7
11 [10,11)   11
12 [11,12)    8
13 [12,13)   12
14 [13,14)   10
15 [14,15)   14
16 [15,16)    8
17 [16,17)    6
18 [17,18)    4
19 [18,19)    5
20 [19,20)    0
21 [20,21)    1
22 [21,22)    1
23 [22,23)    1
24 [23,24)    0

使用 geom_histogram() 是否有可能,如果没有,我还应该使用什么?

【问题讨论】:

  • 你能指定第二列Time 显示观察的时间吗?

标签: r ggplot2


【解决方案1】:

一种解决方案可能是使用 geom_col() 而不是 geom_histogram():

Time <- cut(df1$t, breaks = 0:24, dig.lab = 4, right = FALSE) 
ggplot(data=as.data.frame(table(Time)), aes(x=.5+0:23, y=Freq)) +
  geom_col(colour="steelblue4", fill="steelblue") +
  geom_text(aes(label=Freq), vjust=-0.5) +
  scale_x_continuous("Time",
    breaks=seq(0, 24, by=4),
    labels=c("00:00", "04:00", "08:00", "12:00", "16:00", "20:00", "24:00")) +
  scale_y_continuous("count", breaks = 0:15)

导致下图:

但我承认它有些不雅,因为它需要为图形生成单独的数据框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多