使用ggplot绘制建筑施工全流程时间线甘特图的实现方案
用ggplot绘制建筑施工甘特图实现方案
需求说明
现有三栋建筑的施工时间线数据,包含开工、地基施工、主体结构、室内装修各工序的完工时间,需要绘制甘特图直观展示所有建筑的全施工流程时间线。
原始数据定义
原始数据为宽表格式,每行对应一栋建筑,每列记录对应施工节点的完工日期:
library(tidyverse) library(lubridate) tbl <- tibble( buildings = c("A", "B", "C"), start = ymd(c("2017-12-01", "2018-02-01", "2018-05-01")), foundation = ymd(c("2018-01-01", "2018-04-01", "2018-06-01")), structure = ymd(c("2018-02-09", "2018-05-01", "2018-07-01")), interior = ymd(c("2018-05-01", "2018-06-01", "2018-07-24")) )
数据预处理
需要先把宽表转换为甘特图所需的长任务表,每行对应一个施工阶段,包含所属建筑、阶段名称、开始时间、结束时间四个核心字段:
task_tbl <- tbl %>% # 拆分生成各施工阶段的起止时间 mutate( 地基施工_start = start, 地基施工_end = foundation, 主体结构_start = foundation, 主体结构_end = structure, 室内装修_start = structure, 室内装修_end = interior ) %>% select(buildings, matches("(start|end)$")) %>% # 转换为长表格式 pivot_longer( cols = -buildings, names_to = c("stage", "type"), names_sep = "_" ) %>% # 每个阶段合并为一行,包含起止时间 pivot_wider( names_from = type, values_from = value ) %>% # 调整阶段顺序匹配实际施工逻辑 mutate(stage = factor(stage, levels = c("地基施工", "主体结构", "室内装修")))
绘制甘特图
用geom_linerange即可快速实现甘特图效果,代码如下:
ggplot(task_tbl, aes(y = buildings, color = stage)) + # 绘制各阶段的时间条 geom_linerange(aes(xmin = start, xmax = end), linewidth = 12, alpha = 0.8) + # 坐标轴与主题优化 labs(x = "日期", y = "建筑编号", color = "施工阶段") + scale_x_date(date_breaks = "1 month", date_labels = "%Y-%m") + theme_minimal() + theme( axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "bottom" )
效果说明
最终输出的甘特图Y轴为建筑编号,X轴为日期,不同颜色区分施工阶段,可直观对比三栋建筑的开工时间、各阶段耗时、总工期差异。
内容的提问来源于stack exchange,提问作者SiH
相关产品推荐
相关产品推荐

