2013-02-21 59 views
2

我在向gplot2图中添加垂直线时遇到了一些问题。使用时间在ggplot2中添加vline

我的示例数据框如下所示。

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

任何人都可以告诉我,我可能会得到这个工作吗?

+1

'as.Date'只保留日期部分,不'%H:%M:%S'信息。 – Arun 2013-02-21 10:49:40

回答

6

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

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

您可以通过查看这些2箱子看到了差距:

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" 
+0

非常感谢 - 太棒了! – 2013-02-21 11:01:38

+0

非常感谢。无论如何,我可以使这个更通用,摆脱vline命令的日期?我正在为不同日期的多个文件运行此脚本,因此只需添加vline的时间。这可能吗? – 2013-03-10 16:47:17

+0

@ KT_1 geom_vline()中的日期是必需的,因为它是从1970年1月1日起计算的。当转换为数字时。 – 2013-03-10 16:56:27