x <- structure(list(Date = structure(c(15358, 15359, 15362, 15363,
15364, 15365), class = "Date"), EndTime = structure(c(1327016747,
1327166720, 1327361839, 1327446733, 1327533097, 1327619504), class = c("POSIXct",
"POSIXt"), tzone = ""), ThresholdTime = structure(list(sec = c(0,
0, 0, 0, 0, 0), min = c(0L, 0L, 0L, 0L, 0L, 0L), hour = c(9L,
9L, 9L, 9L, 9L, 9L), mday = c(20L, 21L, 24L, 25L, 26L, 27L),
mon = c(0L, 0L, 0L, 0L, 0L, 0L), year = c(112L, 112L, 112L,
112L, 112L, 112L), wday = c(5L, 6L, 2L, 3L, 4L, 5L), yday = c(19L,
20L, 23L, 24L, 25L, 26L), isdst = c(0L, 0L, 0L, 0L, 0L, 0L
)), .Names = c("sec", "min", "hour", "mday", "mon", "year",
"wday", "yday", "isdst"), class = c("POSIXlt", "POSIXt"))), .Names = c("Date",
"EndTime", "ThresholdTime"), row.names = c(NA, 6L), class = "data.frame")
我希望能够创建一个图表,其中xaxis为Date,yaxis为EndTime
,并使用geom_hline
绘制ThresholdTime
。
我可以删除EndTime
中的%H和%,将其放入yaxis
。基本上,我试图显示EndTime
中的哪些数据点违反了ThresholdTime
。
我面临的问题是:
如果Endtime<-c("2012-01-02 09:00:00")
且我的阈值ThresholdTime
为c("2012-01-01 08:00:00")
,我将如何在图表上显示此内容。如果我从%H:%M
获取EndTime
,它看起来不会违反ThresholdTime
,但实际上它违反了阈值。
我很感激任何解决此问题的意见。
答案 0 :(得分:2)
您的问题是,小时和分钟本身并不能捕获您的所有信息,您还需要一天(或至少相对的一天)。或者另一种思考方式,你需要相对时间。
x$end <- difftime(x$EndTime, as.POSIXct(x$Date), units="hours")
x$thresh <- difftime(x$ThresholdTime, as.POSIXct(x$Date), units="hours")
ggplot不会直接处理difftimes,所以只需转换为它们的数字等效值,这是因为我们强制它是几个小时。然后,它只是标签的一点点格式,看起来像小时和分钟。
ggplot(x, aes(Date, as.numeric(end))) +
geom_point() +
geom_hline(aes(yintercept=as.numeric(thresh))) +
scale_y_continuous(labels=function(dt) {
paste0(sprintf("%02d",floor(dt)),":",sprintf("%02d",floor(60*(dt-floor(dt)))))
})