使用午夜前后的时间创建 ggplot2 直方图

Creating ggplot2 Histogram with Times Around Midnight

我有一组数据,是两个工业过程的结束时间。这些过程在每晚午夜左右结束,我试图通过绘制它们结束时间的闪避直方图来可视化它们彼此相邻的性能。不幸的是,我不知道如何以 ggplot 将在连续直方图中使用它的方式拆分数据。这是我正在使用的数据示例:

testset <- data.table(ProcessA=as.POSIXct(c("2015-01-01 22:12:00",
                          "2015-01-02 22:53:00","2015-01-03 23:42:00",
                          "2015-01-05 00:02:00","2015-01-05 23:33:00",
                          "2015-01-06 23:56:00","2015-01-08 00:19:00",
                          "2015-01-08 23:29:00","2015-01-09 23:14:00",
                          "2015-01-11 00:01:00")), 
                       ProcessB=as.POSIXct(c("2015-01-01 22:12:00",
                          "2015-01-02 23:35:00","2015-01-03 23:18:00",
                          "2015-01-05 00:09:00","2015-01-05 23:03:00",
                          "2015-01-06 22:51:00","2015-01-08 00:22:00",
                          "2015-01-09 00:12:00","2015-01-09 23:01:00",
                          "2015-01-11 00:23:00")))

我已经通过使用以下子集来仅获取时间:

testset$ProcessAtime <- substr(testset$ProcessA, 12, 16)
testset$ProcessAtime <- substr(testset$ProcessA, 12, 16)

然而,这些给了我一些我无法绘制的东西,并且仍然停留在午夜左右。我已经尝试 zoo 但没有找到一种方法来完成我要求的事情。我以前做过这样的事情(参见 here and here),但没有任何东西允许我使用时间来创建我想要创建的情节。

任何帮助将不胜感激!

Base R 没有只有时间的日期格式,您需要日期吗?您可以将它们全部设置为同一日期,或者如果您希望 0 附近的时间接近 24 附近的时间,您可以将它们分成两个日期。这是后者的例子

justtime <- function(x, split=12) {
    h <- as.numeric(strftime(x, "%H"))
    y <- as.POSIXct(paste(ifelse(h<split, "2015-01-02","2015-01-01"),strftime(x, "%H:%M:%S")))
}

然后你可以用

绘图
ggplot(data.frame(time=justtime(testset$ProcessA)), aes(x=time)) + 
    geom_histogram()

这给出了