2

我在将垂直线添加到 gplot2 图形时遇到了一些问题。

下面列出了我的示例数据框。

set.seed(1234)
df <- data.frame(Date=seq(as.POSIXct("05:00", format="%H:%M"), 
                          as.POSIXct("23:00", format="%H:%M"), by="hours"))
df$Counts <- sample(19)
df <- df[-c(4,7,17,18),]

# generate the groups automatically and plot
idx <- c(1, diff(df$Date))
i2 <- c(1,which(idx != 1), nrow(df)+1)
df$grp <- rep(1:length(diff(i2)), diff(i2))
g <- ggplot(df, aes(x=Date, y=Counts)) + geom_line(aes(group = grp)) + 
  geom_point()

似乎有很多关于堆栈溢出和网络的讨论,通常是关于在时间序列上使用 vlines。我已经尝试过纠正我的代码,但到目前为止我运气不佳。

例如,我想在 21 日下午 2 点画一条垂直线。

g1 <- g + geom_vline(xintercept=as.numeric(as.Date("2013-02-21 14:00:00")))

谁能告诉我如何让这个工作?

4

1 回答 1

7

您必须替换as.Date()为,as.POSIXct()因为您还需要时间而不仅仅是日期(函数as.Date()仅代表日期部分)。

g + geom_vline(xintercept=as.numeric(as.POSIXct("2013-02-21 14:00:00")))

通过查看这两种情况,您可以看到差异:

 as.Date("2013-02-21 14:00:00")
[1] "2013-02-21"

 as.POSIXct("2013-02-21 14:00:00")
[1] "2013-02-21 14:00:00 EET"
于 2013-02-21T10:48:38.240 回答