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

