You need to enable JavaScript to run this app. R ggplot2堆叠计数条形图仅为指定填充类加柱顶百分比标签的方法
优惠活动
大模型
产品
解决方案
定价
更多

R ggplot2堆叠计数条形图仅为指定填充类加柱顶百分比标签的方法

自定义堆叠条形顶端标签实现方案

核心实现逻辑

不需要对所有堆叠段统一添加标签,只需要单独提取rework_status == "No Rework"的数据子集,将文本绘制位置对齐到每个条形的最顶端即可,全程不影响原有分段居中计数标注的展示效果。


调整后的可运行代码

library(ggplot2)
library(dplyr) # 用于数据筛选,未安装可先运行 install.packages("dplyr")

ggplot(CRM_df_2, aes(q_year, count, fill = rework_status)) +
  geom_bar(stat = "identity", color = "black", width = 1) +
  # 保留原有堆叠分段居中的计数标注
  geom_text(aes(label = count), position = position_stack(0.5), size = 6, color = "black") +
  # 新增仅针对No Rework类别的顶端占比标签
  geom_text(
    data = CRM_df_2 %>% filter(rework_status == "No Rework" & count > 0),
    aes(label = paste0(percent, "%")),
    position = position_stack(vjust = 1.1), # 上移少量距离避免标签和条形边框重叠
    size = 5,
    color = "black"
  ) +
  facet_wrap(. ~ quarter, scales = 'free_x', nrow = 1, strip.position = 'bottom') +
  theme(
    strip.text = element_blank(),
    strip.placement = 'outside',
    legend.position = "bottom",
    legend.title = element_blank(),
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    plot.title = element_text(hjust = 0.5),
    legend.spacing.x = unit(1.5, 'cm')
  ) +
  labs(title = "CRM First Pass Yield") + 
  scale_fill_manual(values = c(
    "No Rework" = "yellowgreen", 
    "Content Rework" = "royalblue", 
    "CO Rework" = "steelblue1"
  ))

关键参数说明

  • 文本图层单独指定筛选后的数据集:不会对其余两类返工状态生成标签,完全匹配仅展示No Rework占比的需求
  • 用position_stack自动计算标签位置:不需要手动累加每个季度的总样本数来设置标签y坐标,无论堆叠填充的顺序怎么调整,标签都会自动对齐到堆叠条形的最上端,不会出现位置偏移
  • vjust = 1.1的微调:vjust=1对应堆叠结构的最上边界,微调数值可以控制标签和条形顶端的间距,需要更紧凑就调低数值,需要更宽松就调高数值
  • 筛选条件加入count > 0:自动过滤2019年所有计数为0的空行,避免在无有效数据的位置生成无效标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 13:54:09