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

如何修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:52:23