You need to enable JavaScript to run this app. R语言中用geom_col()绘制堆叠条形图如何自动添加百分比数据标签
优惠活动
大模型
产品
解决方案
定价
更多

R语言中用geom_col()绘制堆叠条形图如何自动添加百分比数据标签

填充堆叠条形图自动加百分比标签的简化实现

零额外预处理的基础方案

完全不用手动提前算每个分段的百分比数值,顺着你现有的绘图代码逻辑补一行就行,靠ggplot内置的统计变换自动算占比、自动对齐文字位置。
具体调整逻辑:

  • 原有geom_col的代码完全保留,只新增一个geom_text()图层
  • 标签内容直接取统计变换自动算出的分段占比,转成标准百分比格式
  • 文字的位置参数和geom_col的填充堆叠逻辑完全对齐,设垂直居中对齐,保证每个标签刚好落在对应分段的中间

完整可直接运行的代码:

library(tibble)
library(ggplot2)

# 你原本写好的演示数据集,原样保留不用改
game_systems <- tibble(system = rep(c("Playstation",
                                      "Nintendo",
                                      "XBox",
                                      "NeoGeo"), 4),
                       year = c(rep(2017, 4),
                                rep(2018, 4),
                                rep(2019, 4),
                                rep(2020, 4)),
                       price = c(rep(500, 4),
                                 450, 550, 250, 1000,
                                 400, 600, 125, 2000,
                                 350, 650, 62.5, 4000))

game_systems %>% 
  ggplot(aes(x = system, y = price, fill = factor(year))) + 
  geom_col(position = "fill") +
  # 自动算占比、自动对齐的百分比标签
  geom_text(
    aes(label = after_stat(scales::percent(prop, accuracy = 1))),
    position = position_fill(vjust = 0.5),
    size = 3.5
  )

高频绘图的更省事方案

如果经常做这类填充堆叠图,可以直接用封装好的绘图函数,不用每次手写geom_text的参数,指定标签为占比字段就能一键出图。

新手踩坑提醒:记得把year转成factor再映射到fill,不然ggplot会把年份当连续数值处理,出渐变色阶,破坏堆叠的分组逻辑;如果生成的标签有重叠,在geom_text()里加个check_overlap = TRUE参数就能自动隐藏重叠的标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 12:15:07