如何在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
相关产品推荐
相关产品推荐

