为何我的R语言ggplot geom_col无法堆叠柱状图?
问题原因及解决方法
你的代码没法实现堆叠柱状图,核心问题出在数据结构上:
你当前的数据里,x列是三个独立的类别(a、b、c),每个类别仅对应一个y值。而geom_col的position='stack'作用是将同一x轴位置下的多个柱子堆叠在一起——你现在每个x位置只有一个柱子,自然没东西可堆叠,所以图表默认显示成了分组(每个x对应一个柱子)的布局。
修正方案
要实现堆叠效果,需要调整数据结构,让同一个x轴类别下包含多个需要堆叠的子项。比如添加一个分组列(比如group),把a、b、c作为同一x下的不同堆叠部分:
data.frame( x = rep('总类别', 3), # 统一的x轴标签 group = c('a', 'b', 'c'), # 区分堆叠的子分组 y = c(.549, .051, .4) ) %>% ggplot(aes(x = x, y = y, fill = group)) + # 用fill映射堆叠部分 geom_col(position = 'stack')
这样就能得到垂直堆叠的柱状图:同一x轴位置下,a、b、c三个部分的柱子会叠在一起。
如果你的需求是把a、b、c作为x轴的不同类别,但每个类别下有多个堆叠项,那需要补充对应的数据(比如每个x下至少2个y值),再用fill映射子分组即可。
内容的提问来源于stack exchange,提问作者Peter Yoo
相关产品推荐
相关产品推荐

