绘制 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:30
到 07:30
(binwidth
为 30
分钟)并在 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"))
我已将此问题作为可重现的示例。这是我的数据框的一部分:
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:30
到 07:30
(binwidth
为 30
分钟)并在 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"))