0
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 是 theEndTime并绘制一个geom_hlineusing ThresholdTime

我可以去掉 %H 和 % fromEndTime把它放进去yaxis。基本上我试图显示哪些数据点EndTime违反了ThresholdTime.

我面临的问题是:

如果Endtime<-c("2012-01-02 09:00:00")我的阈值是ThresholdTimec("2012-01-01 08:00:00")我将如何在图表上显示它。如果我从中取出%H:%MEndTime它看起来不会像违反了ThresholdTime但实际上它违反了阈值。

对于解决这个问题,我将不胜感激。

4

1 回答 1

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

在此处输入图像描述

于 2013-01-19T00:09:09.243 回答