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

如何在ggplot2分组柱状图中为每个柱子添加对应数值标签

ggplot2分组柱状图数值标签显示问题解决方法

你的问题核心是**geom_text未设置与柱状图匹配的位置参数**,导致所有标签重叠仅显示一个,且位置未对齐到柱子顶部。以下是具体的修正方案:

原问题代码回顾

数据集:

totaldt <- data.frame(
  year = c(2023, 2022, 2021, 2023, 2022, 2021), 
  var = structure(c(1L, 1L, 1L, 2L, 2L, 2L), levels = c("knowrate", "outrate"), class = "factor"), 
  rate = c(0.616693826, 0.60826895, 0.611211938, 0.795008913, 0.820111343, 0.808219178)
)

原绘图代码:

library(ggplot2)
ggplot(data = totaldt, aes(fill=(factor(year)), y=rate, x=var)) +
  geom_bar(stat="identity", position = "dodge", width=.5) +
  geom_text(aes(label=rate),
            angle=90,
            check_overlap = TRUE,) +
  labs(title = "Rates, MU Total",
       x = "",
       y = "Percentage",
       fill="Year") 

修正后的代码

library(ggplot2)
ggplot(data = totaldt, aes(fill = factor(year), y = rate, x = var)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.5), width = .5) +
  # 核心修正:对齐位置、调整标签高度、格式化数值
  geom_text(aes(label = round(rate, 3)),
            y = totaldt$rate + 0.01,
            position = position_dodge(width = 0.5),
            angle = 90,
            hjust = 0) +
  labs(title = "Rates, MU Total",
       x = "",
       y = "Percentage",
       fill = "Year") +
  ylim(0, 0.9) # 扩展y轴上限,避免标签超出图表范围

关键修改说明

  • 位置对齐:给geom_text添加position = position_dodge(width = 0.5),与geom_bar的位置参数保持一致,确保每个标签对应到对应柱子上方。
  • 标签高度调整:通过y = totaldt$rate + 0.01让标签在柱子顶部外侧偏移一点,避免与柱子边缘重合,偏移量可根据数据范围调整。
  • 数值简化:用round(rate, 3)保留3位小数,让标签更整洁;也可使用scales::percent(rate)转换成百分比格式(需加载scales包)。
  • 文本对齐:hjust = 0让垂直旋转的文本向右对齐,刚好贴合柱子顶部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:33:10