在 R 中使用 ggplot2 创建多项目时间线
Creating a Multi-Project Timeline Using ggplot2 in R
我正在尝试创建一个包含项目各个阶段的多项目时间表,以便在一个易于可视化的地方组织我们所有当前的项目。
我最初找到了 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)
如您所见,在某些情况下阶段会重叠,我无法调整字体或将文本居中放置在各自的框中。
正因为如此,我正在尝试移动到 ggplot,但无法弄清楚如何使其类似于此时间线。
到目前为止这是我的新代码:
ggplot(data,aes(x=data$StartDate, y=data$Project)) +
geom_line()+
geom_point()+
geom_text(aes(label=data$Phase), hjust=0,vjust=0)
就目前而言,xlim 太小,无法显示我的几个项目的整个 CA 阶段。此外,我希望能够自定义文本,按最近的开始日期重新排序,更改 xlab 和 ylab 以及我认为 timleline()
包中不可能的其他图形更改。
感谢您提供的所有帮助,如果您需要任何说明,请告诉我!
我选择使用线段而不是色带,因为它是直线,线段更容易与离散的 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
我正在尝试创建一个包含项目各个阶段的多项目时间表,以便在一个易于可视化的地方组织我们所有当前的项目。
我最初找到了 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)
如您所见,在某些情况下阶段会重叠,我无法调整字体或将文本居中放置在各自的框中。
正因为如此,我正在尝试移动到 ggplot,但无法弄清楚如何使其类似于此时间线。
到目前为止这是我的新代码:
ggplot(data,aes(x=data$StartDate, y=data$Project)) +
geom_line()+
geom_point()+
geom_text(aes(label=data$Phase), hjust=0,vjust=0)
就目前而言,xlim 太小,无法显示我的几个项目的整个 CA 阶段。此外,我希望能够自定义文本,按最近的开始日期重新排序,更改 xlab 和 ylab 以及我认为 timleline()
包中不可能的其他图形更改。
感谢您提供的所有帮助,如果您需要任何说明,请告诉我!
我选择使用线段而不是色带,因为它是直线,线段更容易与离散的 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