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

如何在ggplot2中绘制带部分填充效果的堆叠条形图

如何在ggplot2中绘制带部分填充效果的堆叠条形图

嘿,你这个需求完全可以实现!核心是先调整数据格式,再配合ggplot的颜色设置来搞定,我给你一步步演示:

第一步:整理数据格式

我们需要把原来每行一条预约类别的数据,拆分成已参加和取消两行,这样ggplot才能识别出要堆叠的两个部分:

library(tidyverse)

# 你的原始数据
df <- tribble(
  ~ apt, ~ count, ~ attended,
  "Consult", 5, 3,
  "Follow Up", 3, 2,
  "Procedure", 6, 6
) %>% mutate(apt = factor(apt))

# 转换为长格式,拆分已参加/取消的数量
df_long <- df %>%
  mutate(cancelled = count - attended) %>%  # 计算取消的预约数量
  pivot_longer(
    cols = c(attended, cancelled),
    names_to = "status",
    values_to = "value"
  )

第二步:绘制带部分填充的堆叠图

接下来用转换后的数据绘图,通过自定义填充颜色,让已参加的部分保留原类别颜色,取消的部分用白色(或你想要的空白色),就能实现“部分填充”的视觉效果:

ggplot(df_long, aes(x = "Appointments", y = value)) +
  # 按预约类别+状态分组堆叠,设置填充映射规则
  geom_bar(
    aes(fill = ifelse(status == "attended", apt, "Cancelled")),
    stat = "identity",
    position = "stack"
  ) +
  # 自定义填充色:已参加部分用对应类别颜色,取消部分用白色
  scale_fill_manual(
    values = c(
      "Consult" = "#d73027",  # 红色
      "Follow Up" = "#1a9850", # 绿色
      "Procedure" = "#313695", # 蓝色
      "Cancelled" = "white"
    ),
    # 自定义图例标签,让信息更清晰
    labels = c("Consult", "Follow Up", "Procedure", "Cancelled")
  ) +
  # 调整图表标签和标题
  labs(
    y = "预约数量",
    fill = "预约状态",
    title = "按出席情况部分填充的堆叠条形图"
  ) +
  # 可选:用简洁主题优化图表美观度
  theme_minimal()

效果说明

运行这段代码后,你会看到:

  • 红色的Consult条形只有3/5高度是填充色(对应3个已参加的预约),剩余2/5为白色(取消的预约)
  • 绿色的Follow Up条形2/3是填充色,1/3为白色
  • 蓝色的Procedure条形全为填充色(6个预约都已参加)

这种方法完全用ggplot原生参数实现,不需要额外复杂技巧~

备注:内容来源于stack exchange,提问作者Ron Levitin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:32:42