2013-02-21 60 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