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

如何用R创建带计数的多类型跨时段甘特式图表?

用R实现基于Type+时段组合的分组甘特图(timevis方案)

1. 数据导入与分组计数预处理

先导入CSV数据,把宽格式的时段列转成长格式,筛选出有效记录(数值非0),再按Type+时段组合统计数量:

# 加载依赖包
library(dplyr)
library(tidyr)
library(timevis)

# 替换为你的CSV文件路径
df <- read.csv("your_data.csv", stringsAsFactors = FALSE)

# 宽格式转长格式,只保留存在的时段记录
long_df <- df %>%
  pivot_longer(cols = starts_with("Period"), names_to = "Period", values_to = "Exists") %>%
  filter(Exists != 0) %>%
  select(-Exists)

# 按Type+Period分组统计计数
grouped_df <- long_df %>%
  group_by(Type, Period) %>%
  summarize(Count = n(), .groups = "drop")

2. 构建timevis兼容的数据结构

timevis需要id、content、start、end列定义甘特图条目。按实际比例设置时段长度,计算每个条目的时间区间:

# 替换为各时段的真实长度数值,确保比例符合需求
period_lengths <- c(Period1 = 2, Period2 = 5, Period3 = 3, Period4 = 4, Period5 = 6, Period6 = 2, Period7 = 3)

# 计算每个时段的起始时间(以0为起点累加长度)
period_starts <- c(0, cumsum(period_lengths)[-length(period_lengths)])
names(period_starts) <- names(period_lengths)

# 生成timevis所需的数据集
gantt_data <- grouped_df %>%
  mutate(
    id = row_number(),
    # 内容栏显示分组信息与计数
    content = paste0(Type, " - ", Period, " (", Count, "条)"),
    start = period_starts[Period],
    end = period_starts[Period] + period_lengths[Period]
  )

3. 自定义样式:Type区分颜色,时段区分深浅

通过style列给不同Type分配专属颜色,用透明度区分时段深浅:

# 给6种Type分配对应颜色,可自行调整
type_colors <- c("A" = "#FF6B6B", "B" = "#4ECDC4", "C" = "#45B7D1", "D" = "#96CEB4", "E" = "#FFEAA7", "F" = "#DDA0DD")

# 给各时段设置透明度,数值越小颜色越深
period_opacity <- c(Period1 = 1, Period2 = 0.8, Period3 = 0.6, Period4 = 0.9, Period5 = 0.7, Period6 = 0.5, Period7 = 0.85)

# 为每个条目添加样式
gantt_data <- gantt_data %>%
  mutate(
    style = paste0("background-color: ", type_colors[Type], "; opacity: ", period_opacity[Period], ";")
  )

# 生成甘特图
timevis(
  data = gantt_data,
  options = list(
    axis = list(type = "custom", tick = list(format = function(x) x)), # 显示时长数值而非日期
    orientation = "top" # 可选调整时间轴位置
  )
)

补充说明

  • 若不清楚时段真实长度,可直接用列顺序作为等长比例,或根据数据中时段的平均出现时长计算比例
  • 如需单独展示计数,可给gantt_data添加tooltip列,或用addCustomTime在侧边标注
  • 调整行顺序可在gantt_data中对Type或Period做排序处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:20:55