2013-08-16 49 views
5

我有這樣一個data.frame繪製時段數據:如何使用GGPLOT2

library(ggplot2) 
library(reshape2)  
tasks <- c("Review literature", "Mung data") 
    dfr <- data.frame(
     name  = factor(tasks, levels = tasks), 
     start.date = c("24/08/2010 01:00:01", "24/08/2010 01:00:10", "01/11/2010 01:30:00", "01/11/2010 02:00:00"), 
     end.date = c("24/08/2010 02:00:00", "24/08/2010 03:00:00", "01/11/2010 02:00:00", "01/11/2010 04:00:00") 
    ) 
    mdfr <- melt(dfr, measure.vars = c("start.date", "end.date")) 

我想繪製使用GGPLOT2使不同的日期是在不同的方面,也是唯一一次部分這一數據顯示在X軸上?我想是這樣的:

ggplot(mdfr, aes(as.Date(value, "%H/%M/%S"), name)) + 
    geom_line(size = 6) + 
    xlab("") + ylab("") + 
    theme_bw() + facet_wrap(~as.Date(value, "%d/%m/%Y")) 

Error in layout_base(data, vars, drop = drop) : 
    At least one layer must contain all variables used for facetting 
+0

您可以通過使用「lubridate」包保存自己很多頭痛的,而不是「as.Date」功能。 – Dinre

+0

有一件事,與你的問題有關:我認爲你錯過了'as.date(價值,「%d /%m/Y」)'%。嘗試'as.Date(值,「%d /%m /%Y」)'。 – Henrik

+0

謝謝,它會產生相同的錯誤。我更新了這個問題 – Matkrupp

回答

4

添加到您的熔化的數據幀兩個新列value2datevalue2POSIXct類的時間,date列僅包含您的原始value的日期部分,並轉換爲因子用於刻面。

mdfr$value2<-as.POSIXct(strptime(mdfr$value, "%d/%m/%Y %H:%M:%S")) 
mdfr$date<-as.factor(as.Date(strptime(mdfr$value, "%d/%m/%Y %H:%M:%S"))) 

現在您可以使用新的value2作爲x和日期進行構造。我用facet_grid()scales="free_x"space="free_x"在兩個方面獲得均勻間隔的時間間隔。

ggplot(mdfr, aes(value2, name)) + 
    geom_line(size = 6) + 
    xlab("") + ylab("") + 
    theme_bw() + facet_grid(~date,scales="free_x",space="free_x") 

enter image description here