甘特图(Gantt chart)又称为横道图、条状图。其以图示通过活动列表和时间刻度表示出特定项目的顺序与持续时间。一般用横轴表示时间,纵轴表示活动或项目,线条表示期间计划和实际完成情况。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
甘特图主要应用于工程项目管理,具有直观展示、制作简单、便于理解等特点,得到广泛的应用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
在R语言中有很多包可以绘制甘特图,我们以简单易用的vistime进行演示,该包功能强大,自定义程度较高,可以满足大部分情况下的使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
加载包文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
library(vistime)
library(highcharter)
library(ggplot2)
构造一个虚拟的数据集,主要内容包括项目事件、开始时间、结束时间及区分项目事件的颜色向量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
data <- read.csv(text="event,start,end, color
Task 1,2020-8-23,2020-12-29,green
Task 2,2020-10-15,2020-12-24,red
Task 3,2020-10-28,2021-01-06,blue
Task 4,2021-01-06,2021-02-02,orange"
)
1、hc_vistime()函数绘制甘特图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
#默认参数绘制甘特图
hc_vistime(data)
在默认参数下,Task1和Task4 时间不重叠,可以在同一水平线上显示。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
hc_vistime(data,
optimize_y = F) %>%
hc_size(width = 600,height = 300) #设置图片的尺寸
2、使用vistime()绘制甘特图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
vistime(data,
optimize_y = FALSE,
linewidth = 30)
使用shiny动态显示甘特图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
library(shiny)
shinyApp(
ui = plotly::plotlyOutput("myVistime"),
server = function(input, output) {
output$myVistime <- plotly::renderPlotly({
vistime(data, col.event = "event",
col.group = "event",
linewidth = 25
)
})
}
)
在shinyApp生成的图片中可以显示项目事件的开始和结束日期。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
3、使用g_vistime()函数绘制甘特图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
gg_vistime(data,
optimize_y = F,
col.group = "event",
title = "ggplot customization example")
自定义图片格式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html
gg_vistime(data,
optimize_y = F,
col.group = "event",
title = "ggplot customization example")+
theme(
plot.title = element_text(hjust = 0, size=20),
axis.text.x = element_text(size = 10, color = "violet"),
axis.text.y = element_text(size = 10, color = "red", angle = 30),
panel.border = element_rect(linetype = "dashed", fill=NA),
panel.background = element_rect(fill = 'lightgray'))
参考资料 https://shosaco.github.io/vistime/文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/39981.html