You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R语言中实现多项目任务完成进度的可视化追踪?

我刚好碰到过和你一模一样的需求,用ggplot2的geom_tile()就能完美解决——它既能实现你要的颜色编码进度展示,还能轻松区分NA(任务不适用)和0(未开始)的两种状态,完全避开你之前遇到的甘特图、条形图的问题。

先给你完整的解决方案,一步步来:

第一步:整理数据

首先我们需要把你提供的宽格式数据转成长格式,ggplot2对长数据的支持更好。用tidyr包的pivot_longer()就能快速搞定:

# 先加载需要的包
library(tidyr)
library(ggplot2)

# 你的原始数据
project <- c('Project 1', 'Project 2', 'Project 3', 'Project 4')
job1 <- c(100, 100, NA, 100)
job2 <- c(100, 100, NA, 100)
job3 <- c(100, NA, NA, NA)
job4 <- c(NA, 100, 100, 100)
job5 <- c(50, 100, 100, 100)
job6 <- c(0, 40, 100, 100)
df <- data.frame(project, job1, job2, job3, job4, job5, job6)

# 转长格式
df_long <- df %>%
  pivot_longer(cols = starts_with("job"), 
               names_to = "task", 
               values_to = "completion_pct")

第二步:绘制进度追踪图

接下来用geom_tile()绘制瓷砖图,核心是设置颜色渐变和NA的专属颜色:

ggplot(df_long, aes(x = task, y = project)) +
  # 绘制每个项目-任务的瓷砖,颜色映射完成百分比
  geom_tile(aes(fill = completion_pct), color = "white") +
  # 添加百分比标签,NA显示"N/A"明确区分
  geom_text(aes(label = ifelse(is.na(completion_pct), "N/A", paste0(completion_pct, "%"))), 
            color = "black", size = 4) +
  # 设置颜色规则:0%白色,100%深蓝色,NA用灰色
  scale_fill_gradient(low = "white", high = "#003366", 
                      na.value = "#cccccc", 
                      limits = c(0, 100),
                      name = "完成百分比") +
  # 调整主题让图表更美观清晰
  theme_minimal() +
  labs(x = "任务", y = "项目", title = "各项目任务完成进度追踪") +
  # 旋转x轴标签避免重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

关键细节说明

  • 区分NA和0:通过na.value = "#cccccc"把不适用的任务(NA)设为灰色,未开始的任务(0)是白色,一眼就能区分。
  • 颜色编码scale_fill_gradient()设置从0%到100%的渐变,你可以根据喜好替换lowhigh的颜色值(比如换成绿色系:low = "#f0f9e8", high = "#006d2c")。
  • 标签清晰:每个瓷砖里直接显示百分比或"N/A",不需要额外图例就能看懂。
  • 对齐问题:瓷砖图的每个单元格都是固定的,完全不会出现条形图的对齐混乱问题。

如果你需要进一步优化,比如调整瓷砖大小、修改字体样式,或者按完成率排序项目/任务,都可以在这个基础上微调~

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

火山引擎 最新活动