2015-09-08 43 views
2

我试图创建一个多项目时间轴,该项目以项目的各个阶段为特征,以组织我们当前所有项目向前进展,方便可视化。在R中使用ggplot2创建多项目时间轴

我最初找到了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) 

Result

因此,大家可以看到,相重叠得到在某些情况下,我无法调整字体或将文本置于各自框中。

因此,我试图移动到ggplot,但无法弄清楚如何使其与此时间线类似。

到目前为止,这是我的新代码:

ggplot(data,aes(x=data$StartDate, y=data$Project)) + 
    geom_line()+ 
    geom_point()+ 
    geom_text(aes(label=data$Phase), hjust=0,vjust=0) 

Result2

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

感谢您的任何帮助,请让我知道如果您需要任何澄清!

+0

你真的需要在剧情的标签?因为你有很小的间隔会很困难。彩色块和传说好吗? – Heroka

+0

@Heroka - 是的,彩色块和传说就足够了。 – medavis6

回答

2

我选择使用线段而不是色带,因为它的直线和线段更易于使用离散的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 

enter image description here

+0

完美!非常感谢。最后一个问题,当我包括我所有的实际项目时,我会得到一个图表[像这样](https://i.gyazo.com/ad88d11673ec96a9f20c49cc260dba5a.png),其中StartDate变得模糊和重叠。我试过包括'scale_x_date()',但它给了我一个错误“提供给连续缩放的离散值”。我究竟做错了什么? – medavis6

+0

您确定日期是数据框中的日期对象吗? – Heroka

+0

看起来这是那些经典的“错过逗号”错误,是如此加重的一种。感谢您检查并获取最佳解决方案! – medavis6