2013-08-16 21 views
5

ich data.frame wie dieses:Wie Zeitintervalldaten plotten mit 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")) 

ich diese Daten so mit ggplot2 plotten möchten, dass andere Daten unterschiedlichen Facetten und nur Zeitteil sind Show auf der x-Achse? Ich habe versucht, so etwas wie:

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

Sie sich eine Menge Kopfschmerzen durch Verwendung des ‚lubridate‘ Paket anstelle der ‚as.Date‘ Funktion speichern. – Dinre

+0

Eine Sache, die mit Ihrem Problem zusammenhängt oder nicht: Ich glaube, Sie vermissen ein% in 'as.Date (Wert,"% d /% m/Y ")'. Versuchen Sie 'as.Date (Wert,"% d /% m /% Y ")'. – Henrik

+0

Danke, es erzeugt den gleichen Fehler. Ich habe die Frage aktualisiert – Matkrupp

Antwort

4

Hinzugefügt zu Ihrem geschmolzenen Datenrahmen zwei neue Spalten value2 und date. value2 ist POSIXct Klasse Ihrer Zeit und date Spalte enthält nur Datum Teil Ihrer ursprünglichen value und umgewandelt in Faktor für Facettierung zu verwenden.

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

Jetzt können Sie den neuen Wert2 als x und das Datum für die Facettierung verwenden. Ich habe facet_grid() mit scales="free_x" und space="free_x" verwendet, um gleichmäßig beabstandete Zeitintervalle in beiden Facetten zu erhalten.

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

Verwandte Themen