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

ggplot2堆叠柱状图标注数值被柱子遮挡无法显示问题求解

ggplot2堆叠柱状图数值标签被遮挡解决方案

你的代码存在三个核心问题导致标签被遮挡、错位:

  • 重复绘制柱状图层:plot_fun函数中先后调用了geom_bar(position="dodge")和geom_col(position="stack"),上层堆叠柱直接遮挡了下层渲染的文本标签,同时dodge和stack的位置逻辑冲突,进一步导致标签错位
  • 堆叠顺序不匹配:geom_col设置了reverse=TRUE反序堆叠,但geom_text的position_stack没有同步设置反序,标签和对应分段位置不匹配
  • 深色填充下文本对比度不足:最底层土壤层填充为黑色,默认黑色文本完全无法辨识

修改后的代码

你只需要替换原有plot_fun函数即可,修改点已适配你的需求:

plot_fun <- function(x, title) {
  ggplot(arrange(x, Horizont), aes(Ferment, RAI_N, 
                                   fill = factor(Horizont, levels = c("4", "3", "2", "1")))) +
    # 移除重复的geom_bar层,仅保留堆叠柱图层
    geom_col(position = position_stack(reverse = TRUE)) +
    # 新增文本颜色映射,深色填充层自动切换为白色字提升辨识度
    geom_text(aes(label = RAIH, 
                  color = factor(Horizont, levels = c("4", "3", "2", "1"))), 
              size = 3, 
              # 同步设置position_stack反序,和柱子堆叠顺序完全匹配
              position = position_stack(vjust = 0.5, reverse = TRUE)) +
    # 文本颜色规则:前三层浅色填充配黑字,最底层黑色填充配白字,隐藏文本颜色图例
    scale_color_manual(values = c("black", "black", "black", "white"), guide = "none") +
    scale_fill_manual(name ="土壤层 (cm)", 
                      values = c("#FF9933", "#CC6600", "#663300", "#000000"),
                      labels = c("22,5 - 30", "15 - 22,5", "7,5 - 15", "0 - 7,5")) +
    guides(fill = guide_legend(reverse = TRUE)) +
    ylim(0, 100) +
    theme_bw() +
    facet_wrap(~compost) +
    theme(
      strip.text = element_text(size = 6),
      panel.spacing = unit(0.2, "lines"),
      plot.margin = margin(1,1,1,1)
    ) +
    labs(x = "发酵处理", y = "RAI", fill = "土层", title = title)
}

可选优化

如果存在高度极小的分段标签显示不全,可以在geom_text中增加过滤逻辑,仅显示高度≥2的分段标签:

geom_text(data = ~filter(.x, RAI_N >= 2), # 仅显示高度≥2的分段标签
          aes(label = RAIH, color = factor(Horizont, levels = c("4", "3", "2", "1"))), 
          size = 2.5, 
          position = position_stack(vjust = 0.5, reverse = TRUE))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:15:00