使用geom_bar并按变量级别隐式分组(fill)时,正确设置after_stat显示占比
解决geom_bar显示整体占比的问题
示例数据
s <- data.frame( x = rep(c("Black", "Blue","Brown","Green", "Grey", "Orange", "Purple", "Red", "White", "Yellow"), c(90, 40, 16, 23, 1, 71, 32, 43, 28, 5)) ) s$x <- factor(s$x)
实现占比显示的geom_bar代码
你之前用after_stat(prop)无效的核心原因是:geom_bar默认会按x的每个类别单独分组统计,每个组内的占比自然都是1。要计算整个数据集的全局占比,必须强制指定全局分组group=1,让统计逻辑基于所有数据计算每个类别的占比。
修改后的代码如下:
library(ggplot2) ggplot(s, aes(x = x, fill = x, group = 1)) + scale_fill_manual(values = levels(s$x)) + geom_bar(aes(y = after_stat(prop))) + scale_y_continuous(labels = scales::percent) + # 将小数转为百分比格式 labs(y = "占比")
关键说明
group=1:强制ggplot把整个数据集当作一个分组,这样after_stat(prop)会计算每个类别在全局中的占比,而非组内占比。scale_y_continuous(labels = scales::percent):把Y轴的小数格式转换成更直观的百分比形式,若未安装scales包,先运行install.packages("scales")安装。- 保留了你原有的
scale_fill_manual设置,确保颜色与类别一一对应。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

