2013-08-16 11 views
5

Ho un data.frame come questo:Come tracciare dati in tempo di intervallo utilizzando 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")) 

Vorrei tracciare questi dati utilizzando ggplot2 in modo che siano date diverse su diverse sfaccettature e parte di tempo è il solo spettacolo sull'asse x? Ho provato qualcosa di simile:

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

Si può risparmiare un sacco di mal di testa utilizzando il pacchetto 'lubridate', anziché la funzione 'as.Date'. – Dinre

+0

Una cosa, correlata al tuo problema o no: penso che manchi una% in 'as.Date (valore,"% d /% m/Y ")'. Prova 'as.Date (valore,"% d /% m /% Y ")'. – Henrik

+0

Grazie, produce lo stesso errore. Ho aggiornato la domanda – Matkrupp

risposta

4

Aggiunto alla cornice di dati fuso due nuove colonne value2 e date. value2 è POSIXct la classe dei tuoi tempi e la colonna date contiene solo la data parte dell'originale value e convertita in fattore da utilizzare per la sfaccettatura.

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

Ora è possibile utilizzare il nuovo valore2 come x e la data per il facetting. Ho usato facet_grid() con scales="free_x" e space="free_x" per ottenere intervalli di tempo uniformemente distanziati in entrambi gli aspetti.

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

Problemi correlati