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

ggplot绘图需求:显示全部预设项目阶段并展示项目进度

解决方案

步骤1:数据预处理

首先需要把原始数据展开,生成每个项目的所有已完成阶段和当前阶段的记录,同时确保阶段顺序包含所有需要展示的阶段(包括phase6)。

步骤2:绘图实现

这里提供两种可视化方式,你可以根据需求选择:

方式1:瓷砖图(清晰展示每个阶段状态)

用不同颜色的方块区分已完成阶段和当前阶段,所有指定阶段都会显示在x轴上,哪怕没有对应数据。

library(tidyverse)

# 定义所有需要展示的阶段,包含phase6
phases <- c("phase1", "phase2", "phase3", "phase4", "phase5", "phase6")

# 原始数据
df1 = data.frame(a = c("Project1", "Project2", "Project3","Project4"),
                 b = c(2, 4, 2, 5))

# 数据预处理:生成每个项目的阶段记录并标记状态
df_processed <- df1 %>%
  mutate(current_phase = phases[b]) %>%
  rowwise() %>%
  mutate(phase = list(phases[1:b])) %>%
  unnest(phase) %>%
  mutate(status = ifelse(phase == current_phase, "当前阶段", "已完成")) %>%
  ungroup() %>%
  mutate(phase = factor(phase, levels = phases))

# 绘制瓷砖图
ggplot(df_processed, aes(x = phase, y = a, fill = status)) +
  geom_tile(color = "white", size = 1) +
  scale_fill_manual(values = c("已完成" = "#90EE90", "当前阶段" = "#FFB6C1")) +
  scale_x_discrete(drop = FALSE) + # 强制显示所有阶段,包括无数据的phase6
  labs(x = "项目阶段", y = "项目名称", fill = "状态") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

方式2:线条+点图(突出阶段推进路径)

用线条展示已完成的阶段路径,用点标记当前阶段,同样保留所有指定阶段的x轴。

ggplot() +
  # 绘制已完成阶段的线条
  geom_segment(data = df1 %>%
                 mutate(end_phase = phases[b-1]),
               aes(x = phases[1], xend = end_phase, y = a, yend = a),
               color = "#90EE90", size = 2) +
  # 绘制当前阶段的标记点
  geom_point(data = df1 %>% mutate(current_phase = phases[b]),
             aes(x = current_phase, y = a),
             color = "#FFB6C1", size = 5) +
  scale_x_discrete(limits = phases, drop = FALSE) +
  labs(x = "项目阶段", y = "项目名称") +
  theme_minimal()

关键说明

  • scale_x_discrete(drop = FALSE) 是核心设置,确保x轴显示所有定义的阶段,哪怕没有对应数据(比如phase6)。
  • 通过factor(phase, levels = phases) 固定阶段的显示顺序,避免ggplot自动打乱排序。
  • 颜色可按需自定义,替换代码中的颜色值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:45:00