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

如何用ggplot绘制多时间区间甘特图?对比计划与实际工期

解决ggplot绘制项目计划/实际甘特图的问题

你的代码存在几个关键问题导致无法正常运行,下面是修正后的完整代码及问题说明:

问题点梳理

  • 管道符语法错误:project_data %> 缺少末尾的%,正确写法是project_data %>%
  • 日期未转换为时间类型:当前日期是字符格式,ggplot无法识别为时间轴,无法正确排序和展示
  • 数据结构不匹配绘图需求:宽格式数据难以实现y轴重复显示项目名称并对应不同时间组,需要转为长格式

修正后的代码

library(tidyverse)

# 构建数据并转换日期格式
project_data <- tibble(
  Project_Name = c("Warehouse"),
  Proposed_Start = mdy("05-01-2022"),  # 用mdy()识别月-日-年格式的日期
  Proposed_Finish = mdy("12-01-2022"),
  Actual_Start = mdy("07-01-2022"),
  Actual_Finish = mdy("12-31-2022")
)

# 将宽格式数据转为长格式,适配分组绘图需求
project_long <- project_data %>%
  pivot_longer(
    cols = -Project_Name,
    names_to = c("Type", ".value"),
    names_pattern = "(.*)_(Start|Finish)"
  )

# 绘制甘特图
ggplot(project_long, aes(x = Start, xend = Finish, y = Project_Name, yend = Project_Name, color = Type)) +
  geom_segment(size = 8) +
  scale_color_manual(values = c("Actual" = "red", "Proposed" = "green")) +
  labs(title = "项目计划与实际日期对比",
       x = "起止日期",
       y = "项目名称") +
  theme_minimal()

代码说明

  • 用mdy()函数(tidyverse内置的lubridate包提供)将字符日期转为标准Date类型,确保x轴为正确的时间轴
  • pivot_longer()将宽格式数据重构为长格式,生成Type列区分计划/实际数据,同时保留统一的Start和Finish列,让ggplot自动分组,实现y轴重复显示"Warehouse"并对应两组时间线段
  • scale_color_manual()自定义颜色,同时自动生成清晰的图例,比直接在aes中写颜色字符串更规范

内容的提问来源于stack exchange,提问作者Harry Kalsted

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:01:00