2013-08-07 34 views
3

我想根據用戶Didzis Elferts提供的慷慨代碼在ggplot中製作甘特圖。我想添加一條顯示今天日期的垂直線,但ggplot2包中的geom_vline層只返回Error: Discrete value supplied to continuous scale。這裏是我的代碼:水平線和垂直線在ggplot中接受「Date」類的麻煩?

today <- as.Date(Sys.Date(), "%m/%d/%Y") 
    library(scales) 
    ggplot(mdfr, aes(time,name, colour = is.critical)) + 
     geom_line(size = 6) + 
     xlab("") + ylab("")+ 
     labs(title="Sample Project Progress")+ 
     theme_bw()+ 
     scale_x_datetime(breaks=date_breaks("1 year"))+ 
     geom_vline(aes(xintercept=today)) 

情節沒有geom_vline命令如下plot

有什麼理由geom_vline不會爲「日期」字工作?

編輯:用於生成情節重現代碼:

### GANTT CHART 1 ###############3 
    tasks <- c("Meetings", "Client Calls", "Design", "Bidding", "Construction") 
    dfr <- data.frame(
     name  = factor(tasks, levels = tasks), 
     start.date = c("07/08/2013", "07/08/2013", "07/23/2013", "08/30/2013", "9/30/2013"), 
     end.date = c("07/12/2013", "07/13/2013", "08/15/2013", "09/12/2013", "12/01/2013"), 
     is.critical = c(TRUE, FALSE, TRUE, TRUE, TRUE)) 

    mdfr <- melt(dfr, measure.vars = c("start.date", "end.date")) 
    mdfr$time <- as.POSIXct(strptime(mdfr$value,"%m/%d/%Y")) 
+0

請提供一個可重現的例子。 – JT85

+0

完成。感謝您的建議。 – doorguote

回答

8

有兩個認爲你需要在你的代碼改變。

首先,對於在mdfr使time列使用as.POSIXct()同樣要與today做 - 這兩個變量應該具有相同的格式。

today <- as.POSIXct(Sys.Date(), "%m/%d/%Y") 

二,使用as.numeric()geom_vline()周圍today內。

+ geom_vline(aes(xintercept=as.numeric(today))) 
+0

夥計,這麼簡單,但非常有效。謝謝你的幫助。 – doorguote