如何在R的ggplot中制作不堆叠求和的堆叠条形图?
解决方案
问题出在ggplot默认会对同一x和fill分组下的y值自动求和。要实现每个数据行单独堆叠、不合并求和的效果,只需给每个观测添加独立的分组标识,让ggplot将每一行数据视为单独的堆叠元素。
修改后的代码如下:
library(ggplot2) data <- data.frame( col1 = c("A", "A", "B", "B", "B", "C", "D", "D", "D"), col2 = c(5, 7, 1, 5, 3, 8, 4, 1, 3), col3 = c("grey", "red", "grey", "red", "grey", "grey", "grey", "red", "grey") ) ggplot(data, aes(x = col1, y = col2, fill = col3, group = row_number())) + geom_col() + # geom_col 等价于 geom_bar(stat = "identity"),写法更简洁 scale_fill_manual(values = c("grey" = "grey", "red" = "red")) + theme_minimal()
代码说明
group = row_number():为每一行数据分配唯一的分组ID,强制ggplot不对同x和fill下的y值进行求和,而是将每个观测作为独立的堆叠块。geom_col():替代geom_bar(stat = "identity"),功能完全一致,但语义更清晰,专门用于绘制已知数值的条形图。
运行上述代码后,就能得到你期望的堆叠效果:每个col1分组下,对应的数据行按col3的颜色依次堆叠,数值不会被合并求和。
内容的提问来源于stack exchange,提问作者Yuto Best boy
相关产品推荐
相关产品推荐

