You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:24:02