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

时间:2015-06-25 00:13:41

标签: r date time ggplot2 zoo

我有一组数据是两个工业流程的结束时间。这些过程每晚午夜结束,我试图通过绘制他们结束时间的躲闪直方图来将他们的表现相互映射。不幸的是,我不知道如何以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,但没有办法做我要求做的事情。我以前做过这样的事情(参见herehere)但是没有任何东西可以让我用时间来创建我想要创建的图。

任何帮助都将非常感激!

1 个答案:

答案 0 :(得分:2)

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()

给出了

enter image description here