如何修正R中ggplot堆叠条形图的数据标签位置错误?
堆叠条形图标签位置错误的解决办法
你的问题出在两个地方:一是geom_label没有按Died分组计算堆叠位置,二是代码存在语法和参数缺失问题,导致标签错位。
核心修正步骤
- 给geom_bar加
stat=identity:你用了y = n,说明数据是已经按Race和Died汇总好的(每个组对应一个数值n),但geom_bar默认是stat_count(自动计数),必须显式指定stat = "identity"才能正确使用你现有的n值。 - geom_label的aes要包含
fill=Died:只有把fill = Died放进geom_label的映射里,ggplot才会知道标签要对应到每个堆叠的条形组,计算正确的居中位置。 - 修正语法错误:你代码里的
Deaths是无效参数,要么是笔误,要么应该写成data = 对应数据框(如果用的是同一个race_death就不用写)。
修正后的完整代码
bp <- ggplot(race_death) + # 把fill和y都放进geom_bar的aes,加stat=identity geom_bar(aes(x = Race, y = n, fill = Died), stat = "identity") + ggthemes::theme_economist() + scale_fill_manual(values = my_palette) + geom_label( # 必须添加fill=Died到aes里,和条形分组对应 aes(x = Race, y = n, fill = Died, label = n), size = 3, # position_stack自动按分组计算居中位置,vjust=0.5就是垂直居中 position = position_stack(vjust = 0.5), # 可选:加白色文字让标签在彩色条形里更显眼 color = "white" ) + coord_flip() bp
额外提示(如果数据未汇总)
如果你的原始数据还没按Race和Died分组统计n值,先用dplyr预处理:
library(dplyr) race_death_summary <- race_death %>% group_by(Race, Died) %>% summarise(n = n(), .groups = "drop")
之后用race_death_summary替换代码里的race_death即可。
内容的提问来源于stack exchange,提问作者tortillachip
相关产品推荐
相关产品推荐

