2013-08-16 34 views
5

Tôi có một data.frame như thế này:Làm thế nào để vẽ dữ liệu khoảng thời gian sử dụng 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")) 

Tôi muốn vẽ dữ liệu này sử dụng ggplot2 để những ngày khác nhau là trên khía cạnh khác nhau và phần thời gian duy nhất là chương trình trên trục x? Tôi cố gắng một cái gì đó như:

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

Bạn có thể tiết kiệm cho mình rất nhiều nhức đầu bằng cách sử dụng gói 'lubridate', thay vì chức năng 'as.Date'. – Dinre

+0

Một điều, liên quan đến vấn đề của bạn hay không: Tôi nghĩ bạn bỏ lỡ một% trong 'as.Date (giá trị,"% d /% m/Y ")'. Hãy thử 'as.Date (giá trị,"% d /% m /% Y ")'. – Henrik

+0

Cảm ơn, nó tạo ra cùng một lỗi. Tôi đã cập nhật câu hỏi – Matkrupp

Trả lời

4

Đã thêm vào khung dữ liệu nóng chảy của hai cột mới value2date. value2POSIXct lớp thời gian của bạn và cột date chỉ chứa một phần ngày của value ban đầu của bạn và được chuyển đổi thành yếu tố để sử dụng cho mặt.

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

Bây giờ bạn có thể sử dụng giá trị mới2 làm x và ngày để tạo mặt. Tôi đã sử dụng facet_grid() với scales="free_x"space="free_x" để nhận khoảng thời gian đều nhau trong cả hai mặt.

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

Các vấn đề liên quan