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

如何在R的ggplot甘特图中根据列值调整颜色深浅?

解决方案

要实现根据Forecasted列调整甘特图颜色深浅的需求,这里提供两种实用方法:

方法一:用透明度区分深浅

通过将透明度(alpha)映射到Forecasted列,直接设置"Actual"为完全不透明(深色)、"Predicted"为半透明(浅色),同时保留按Stage区分颜色的逻辑:

library(tidyverse)

df <- data.frame(ProjectName = c("Project A","Project A","Project A","Project A","Project A"),
                 Year = c("2000","2000","2000","2000","2000"),
                 Forecasted = c("Actual", "Predicted","Predicted","Predicted","Predicted"),
                 StartDate = c("2000", "2001", "2002", "2003", "2004"),
                 EndDate = c("2001", "2002", "2003", "2004", "2005"),
                 Stage = c("Planning", "Gathering", "Starting", "Editing", "Ending"))

test_gantt <- df %>%  
  ggplot(aes(x = StartDate, xend = EndDate,
             y = Year, yend = Year,
             color = Stage,
             alpha = Forecasted)) +  # 新增透明度映射
  geom_segment(size=8) +
  # 手动设置透明度值:Actual完全不透明,Predicted半透明
  scale_alpha_manual(values = c("Actual" = 1, "Predicted" = 0.5)) +
  labs( 
    x = 'Start and Finish Dates', 
    y = 'Year At Time of Forecast',
    alpha = "Forecast Type")  # 补充透明度图例标题

test_gantt

方法二:指定同色系深浅颜色

如果需要直接用颜色色调的深浅区分,而非透明度,可以先创建Stage和Forecasted的组合变量,再手动为每个组合指定对应深浅的颜色:

library(tidyverse)

df <- data.frame(ProjectName = c("Project A","Project A","Project A","Project A","Project A"),
                 Year = c("2000","2000","2000","2000","2000"),
                 Forecasted = c("Actual", "Predicted","Predicted","Predicted","Predicted"),
                 StartDate = c("2000", "2001", "2002", "2003", "2004"),
                 EndDate = c("2001", "2002", "2003", "2004", "2005"),
                 Stage = c("Planning", "Gathering", "Starting", "Editing", "Ending")) %>%
  # 生成阶段与预测类型的组合变量,用于绑定颜色
  mutate(Stage_Forecast = paste(Stage, Forecasted, sep = "_"))

test_gantt <- df %>%  
  ggplot(aes(x = StartDate, xend = EndDate,
             y = Year, yend = Year,
             color = Stage_Forecast)) +  
  geom_segment(size=8) +
  # 手动指定每个组合的深浅颜色
  scale_color_manual(values = c(
    "Planning_Actual" = "#1f77b4",  # 深蓝色(Actual阶段)
    "Gathering_Predicted" = "#aec7e8",  # 浅蓝(Predicted阶段)
    "Starting_Predicted" = "#ffbb78",  # 浅橙
    "Editing_Predicted" = "#98df8a",  # 浅绿
    "Ending_Predicted" = "#ff9896"  # 浅红
  )) +
  labs( 
    x = 'Start and Finish Dates', 
    y = 'Year At Time of Forecast',
    color = "Stage & Forecast Type")

test_gantt

补充说明

  • 方法一简洁高效,能快速保留原有的阶段颜色分类,适合需要保持颜色一致性的场景。
  • 方法二更灵活,可精准控制每个阶段的深浅色调,适合对颜色有特定设计要求的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:00:22