在时空图中绘制多列

时间:2017-08-02 23:19:48

标签: r dataframe ggplot2

我有一个具有以下结构的数据框(两个事件的空间明智到达和离开时间,U1和U2)。我试图绘制一个时空图,使x轴显示时间刻度,y轴显示空间。我尝试过很少的东西,比如情节功能,然而,无法用来绘制它。任何人都可以帮助我吗?谢谢!

  Space  U2       U1
  A      16:14:00 16:29:00
  A      18:56:00 19:05:00
  B      19:14:00 19:16:59
  B      19:32:00 19:39:59
  C      19:50:00 19:57:59
  C      20:10:59 20:15:00
  D      16:21:00 16:39:00
  D      16:32:00 16:54:00
  E      16:48:59 17:10:00
  E      17:01:59 17:24:00

更新:我已经能够用ggplot绘制一些东西,但是,空格之间的跳跃点没有连接。不知道如何连接它们?

df%>% mutate(Space= factor(Space, levels=unique(Space))) %>% gather(var,     val, -Space)%>% ggplot(aes(Space, val, color = var,group = interaction(val,Space,var)))+ geom_line()

1 个答案:

答案 0 :(得分:1)

我对OP的要求的理解如下:

  1. 每个空格的第一行给出到达时间,第二行给出出发时间。因此,事件U1在太空A的到达时间为16:29,出发时间为19:05。

  2. 在图表中,每个事件和空间的到达和离开时间应通过线段连接,沿x轴的时间和沿y轴的空间。

  3. 要使用geom_segment()绘制线段,需要对数据进行重新整形,以使到达和离开时间显示在一行中的两列中,而不是一行下面的两列。这是通过使用melt()包中的dcast()data.table来实现的:

    library(data.table)   #CRAN version 1.10.4 used
    
    # use chaining, start with converting a copy of df to class data.table
    pd <- data.table(df)[
      # reshape from wide to long form to get all events in one column,
      # thereby renaming conveniently
      , melt(.SD, id.var = "Space", variable.name = "Event", variable.factor = FALSE)][
        # reshape from long to wide to get arrival and departure times 
        # for each space and each event in one row
        # use factor to give meaningful names to  columns (instead of numbers)
        , dcast(.SD, Space + Event ~ factor(rowid(Space, Event),  
                                            labels = c("Arrival", "Departure")))]
    
    pd
    
        Space Event  Arrival Departure
     1:     A    U1 16:29:00  19:05:00
     2:     A    U2 16:14:00  18:56:00
     3:     B    U1 19:16:59  19:39:59
     4:     B    U2 19:14:00  19:32:00
     5:     C    U1 19:57:59  20:15:00
     6:     C    U2 19:50:00  20:10:59
     7:     D    U1 16:39:00  16:54:00
     8:     D    U2 16:21:00  16:32:00
     9:     E    U1 17:10:00  17:24:00
    10:     E    U2 16:48:59  17:01:59
    

    现在,可以绘制重新塑造的数据:

    library(ggplot2)
    ggplot(pd) + 
      aes(x = Arrival, xend = Departure, y = Space, yend = Space, colour = Event) + 
      geom_segment() + 
      geom_point() + geom_point(aes(x = Departure)) + 
      xlab("Time") + 
      theme_bw()
    

    enter image description here

    请注意,某些线段会重叠,但会显示起点和终点。

    避免过度绘制的其他选项可能是刻面或在y轴上绘制交互变量interaction(Space, Event)(或interaction(Event, Space)以获得不同的顺序)。