如何使用ggplot2绘制时间间隔数据

Mat*_*upp 5 r ggplot2

我有一个像这样的data.frame:

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"))
Run Code Online (Sandbox Code Playgroud)

我想使用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
Run Code Online (Sandbox Code Playgroud)

Did*_*rts 4

添加到您的融化数据框中两个新列value2和date。value2是POSIXct您的时间类别,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")))
Run Code Online (Sandbox Code Playgroud)

现在您可以使用新的 value2 作为 x 和日期进行分面。我使用facet_grid()withscales="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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述