绘制 x 轴范围从 17:30 到 7:30 的时间值直方图

Plotting a Histogram of Time Values where the x-axis ranges from 17:30 to 7:30

我已将此问题作为可重现的示例。这是我的数据框的一部分:

df <- structure(list(`Room Out Date` = c("2018-07-08", "2018-07-08", 
                "2018-07-08", "2018-07-09", "2018-07-09", "2018-07-09", "2018-07-09", 
                "2018-07-09", "2018-07-09", "2018-07-09", "2018-07-09", "2018-07-09", 
                "2018-07-10", "2018-07-10", "2018-07-10"), 
                `Room Out Time` = c("20:11:00", 
                "20:43:00", "22:28:00", "18:00:00", "18:32:00", "18:40:00", "18:59:00", 
                "19:16:00", "19:22:00", "19:38:00", "19:48:00", "21:24:00", "18:12:00", 
                "18:38:00", "18:40:00")), row.names = c(NA, -15L), 
                class = c("tbl_df", "tbl", "data.frame"))

我想创建一个直方图,其中 x 轴上的时间范围从 17:3007:30binwidth30分钟)并在 y 轴上计数。我尝试过使用 chron 库和 posixct 来转换时间,但是 ggplot 似乎不喜欢这两种方法中的任何一种。非常感谢任何帮助。

已编辑: 现在按半小时周期整理所有日期

尝试 lubridate:

library(lubridate)

df %>%
  mutate(fakedate = ymd("2000-01-01")) %>%  # pretend all happen on same day
  mutate(fakedate_time = as_datetime(paste(fakedate, `Room Out Time`))) %>% 
  mutate(fakedate_time = as_datetime(ifelse(fakedate_time > as_datetime("2000-01-01 12:00:00"),
                                            fakedate_time,
                                            fakedate_time + days(1)))) %>%  # promote some to after midnight
  ggplot(aes(fakedate_time)) +
  geom_histogram(binwidth = 1800) +  # bins of 1800 seconds = 30 minutes
  xlim(as_datetime("2000-01-01 17:00:00"), as_datetime("2000-01-02 07:30:00"))