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

如何在ggplot2分组条形图的条形顶部添加计数标签?

给分组条形图添加顶部计数的实现方法

你可以通过在原代码中添加geom_text()层来实现需求,核心是利用stat='count'获取条形的计数值,并通过position_dodge()让文字与分组条形对齐。具体修改后的代码如下:

library(tidyverse)
df %>%
  ggplot(aes(x = population, color = Smoking, fill = Smoking)) +
  geom_bar(position = 'dodge') +
  # 添加条形顶部计数
  geom_text(stat = 'count', 
            aes(label = ..count..),
            position = position_dodge(width = 0.9), # 和geom_bar默认宽度匹配,保证文字与条形对齐
            vjust = -0.5) # 让文字向上偏移,避免和条形顶部重叠
  theme(axis.text.x = element_text(angle=90, vjust=.5, hjust=1))

关键参数说明:

  • stat='count':和geom_bar逻辑一致,自动统计每个分组的样本数量
  • aes(label = ..count..):把统计出的计数值作为条形顶部显示的文字
  • position_dodge(width = 0.9):geom_bar默认条形宽度为0.9,设置相同宽度能让每个分组的文字精准对应到各自条形上方
  • vjust = -0.5:调整文字垂直位置,负数代表向上偏移,避免和条形本身重叠

如果你提前对数据做了汇总统计(比如用count(population, Smoking)生成了计数字段),也可以直接用汇总后的数据绘图,此时geom_bar需指定stat='identity',geom_text直接引用计数字段:

# 先做数据汇总
df_summary <- df %>% count(population, Smoking)

# 用汇总数据绘图加计数
df_summary %>%
  ggplot(aes(x = population, y = n, color = Smoking, fill = Smoking)) +
  geom_bar(stat = 'identity', position = 'dodge') +
  geom_text(aes(label = n),
            position = position_dodge(width = 0.9),
            vjust = -0.5) +
  theme(axis.text.x = element_text(angle=90, vjust=.5, hjust=1))

两种方法都能达到目标,第一种适合直接用原始数据快速绘图,第二种适合需要复用汇总数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:12:52