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

