在R中使用ggplot2创建多项目时间线

在R中使用ggplot2创建多项目时间线,r,ggplot2,boxplot,R,Ggplot2,Boxplot,我正在尝试创建一个多项目时间表,该时间表以项目的各个阶段为特征,以便在一个易于可视化的地方组织我们当前所有的项目 我最初找到了timeline()包,并且能够半创建我所希望的内容。然而,这个包似乎不是很可定制,所以我希望在ggplot2()中完成我的时间线 这是我的假数据: Phase Project StartDate EndDate SD Test1 2015-08-01 2015-08-31 DD Test1 2015-08-31 2015-09-30 CD Test1 201

我正在尝试创建一个多项目时间表,该时间表以项目的各个阶段为特征,以便在一个易于可视化的地方组织我们当前所有的项目

我最初找到了
timeline()
包,并且能够半创建我所希望的内容。然而,这个包似乎不是很可定制,所以我希望在
ggplot2()
中完成我的时间线

这是我的假数据:

Phase Project StartDate EndDate  
SD Test1 2015-08-01 2015-08-31  
DD Test1 2015-08-31 2015-09-30  
CD Test1 2015-09-30 2015-11-14  
PC Test1 2015-11-14 2015-12-14  
CA Test1 2015-12-14 2016-08-10  
SD Test2 2015-09-01 2015-10-01  
DD Test2 2015-10-01 2015-10-31  
CD Test2 2015-10-31 2015-12-15  
PC Test2 2015-12-15 2016-01-14  
CA Test2 2016-01-14 2017-01-08  
SD Test3 2016-01-01 2016-01-13  
DD Test3 2016-01-13 2016-01-25  
CD Test3 2016-01-25 2016-02-12  
PC Test3 2016-02-12 2016-03-13  
CA Test3 2016-03-13 2017-01-07  
SD Test4 2015-06-01 2015-06-01  
DD Test4 2015-06-01 2015-06-01  
CD Test4 2015-06-01 2015-06-01  
PC Test4 2015-06-01 2015-07-01  
CA Test4 2015-07-01 2015-07-01  
SD Test5 2015-05-01 2015-05-25  
DD Test5 2015-05-25 2015-06-18  
CD Test5 2015-06-18 2015-07-24  
PC Test5 2015-07-24 2015-08-23  
CA Test5 2015-08-23 2015-08-23  
如您所见,每个项目都列出了5个阶段(SD、DD、CD、PC、CA),尽管有些项目(Test4)没有几个阶段,因为它们当前列出了相同的日期周期

当我使用
timeline()
运行代码时,我得到的是:

    data$StartDate<- as.Date(data$StartDate)
    data$EndDate<- as.Date(data$EndDate)
    timeline(data, text.size=4)

目前,xlim太小,无法显示我的几个项目的整个CA阶段。此外,我希望能够自定义文本,按最新开始日期对其重新排序,更改xlab和ylab以及我认为在
Timline()
包中不可能进行的其他图形更改


谢谢您的帮助,如果您需要任何澄清,请告诉我

我选择使用分段而不是ribbon,因为它是直线,分段更容易与离散的y轴一起使用

#make ordered factor so that sequence in legend matches sequence in plot
data$Phase_ordered <- factor(data$Phase,levels=c("SD","DD","CD","PC","CA"))

p1 <- ggplot(data,aes(x=StartDate, y=Project, color=Phase_ordered)) +
  geom_segment(aes(x=StartDate,xend=EndDate,yend=Project),size=15) +
 scale_colour_discrete(guide=guide_legend(override.aes=list(size=7))) #or legend will be too big
p1
#设置有序因子,以便图例中的顺序与绘图中的顺序匹配

data$Phase_排序您真的需要绘图中的标签吗?因为如果你的间歇时间很短,那就很难了。彩色方块和图例可以吗?@Heroka-是的,彩色方块和图例就足够了。太好了!非常感谢你。最后一个问题,当我把我所有的实际项目都包括进来时,我得到了一个开始日期变得模糊和重叠的图表。我试着包括
scale\u x\u date()。我做错了什么?你确定date在你的数据框中是一个日期对象吗?看起来这是一个典型的“缺少逗号”错误,非常令人恼火。感谢您再次登录并提供了出色的解决方案!现在我已经正确设置了绘图,
ggplot()
会根据项目名称在Y轴上按字母顺序自动排序。由于数据最初是在我的数据帧中排序的,所以我无法找到一种按SD阶段最早开始日期排序的方法。这将使图形更美观,对用户更有用。您需要使y变量成为一个因子,按StartDate排序。例如:
data$Project\u
#make ordered factor so that sequence in legend matches sequence in plot
data$Phase_ordered <- factor(data$Phase,levels=c("SD","DD","CD","PC","CA"))

p1 <- ggplot(data,aes(x=StartDate, y=Project, color=Phase_ordered)) +
  geom_segment(aes(x=StartDate,xend=EndDate,yend=Project),size=15) +
 scale_colour_discrete(guide=guide_legend(override.aes=list(size=7))) #or legend will be too big
p1