在R中仅使用yyyy而不是dd-mm-yyy创建甘特图/时间线

时间:2019-01-29 11:36:21

标签: r ggplot2 timeline gantt-chart

我正在总结不同试验在其参考章节中引用的证据。我想在图表上显示最早和最新引用的论文以及实际试验的发布年份。我已经尝试过使用ggplot,基本绘图功能和googleVis解决方案,但是没有运气。

我想要的有点像甘特图,试验名称在y轴上,年份(yyyy)在x轴上。我遇到了麻烦,因为那里的大多数甘特图代码都适用于日期,而且也无法处理图表上我需要的三个元素-

最早参考

最新参考

出版日期

poorly drawn postit of what I'm trying to achieve

更新: 这接近我想要的,并且此代码非常有效,谢谢。我很高兴您也在ggplot中做到了,我已经习惯了该软件包。

我还需要在图表上添加一个第三类(发布日期),所以df是

df <- structure(list(task = structure(1:3, .Label = c("Trial1", "Trial2", "Trial3"), 
                                  class = "factor"), start_year = c(1980, 2003, 2000),
                 end_year = c(2006, 2013, 2010), pub_date = c(2011, 2015, 2013)), 
            class = "data.frame",
            row.names = c(NA, 3L))

我希望pub_date与图表的start_year <-> end_year行分开。

1 个答案:

答案 0 :(得分:0)

这是您想要的示例的可复制示例。首先,您应该在议程中指定每个任务的开始和结束日期,然后将不同的任务作为因素存储在数据框中,如下所示。

  df <- structure(list(task = structure(1:3, .Label = c("Trial1", "Trial2", 
    "Trial3"), class = "factor"), start_year = c(1980, 2003, 2000
    ), end_year = c(2006, 2013, 2010), pub_date = c(2011, 2015, 2013
    )), class = "data.frame", row.names = c(NA, 3L))

例如,使用tidyr包中的collect函数整理日期是很重要的。这样,我将开始和结束年份放在同一列中,这样可以更轻松地绘制海湾任务。

   library(tidyverse)
   df %>% 
      gather(key = "start_end_date)", value = "year", -task, -pub_date) %>%
      ggplot(aes(x = year, y = task, color = task)) +
      geom_line(size = 2) + 
      geom_point(size = 3) + 
      geom_point(aes( x = pub_date), shape = 3, size = 3) +
      scale_x_continuous(breaks = seq(1980, 2016, 6))

enter image description here