ggplot2堆叠柱状图:柱内填充占比异常问题求助
问题原因与解决方法
问题根源
你当前的代码错误地将Total(总计值)作为y轴映射,而堆叠柱状图需要为每个Type(结构类型)分配对应的单独数值,而非用总计值。如果你的数据是宽格式(比如Genus列之外,每个Type是单独一列,Total是各类型的总和),ggplot无法识别每个类型的具体数量,只能把每个柱子按Type的数量均分高度,导致占比完全一致。
解决步骤
转换数据格式
把宽格式数据转成ggplot要求的长格式(每行对应一个Genus+Type的组合,记录该类型的数量),用tidyr::pivot_longer实现:library(tidyr) library(dplyr) # 排除Total列,将所有Type列转为长格式 Brass.long <- Brass.ready %>% select(-Total) %>% pivot_longer(cols = -Genus, names_to = "Type", values_to = "Count")修正绘图代码
用转换后的Count列作为y轴,而非原有的Total:ggplot(Brass.long, aes(x = Genus, y = Count, fill = Type)) + geom_col() + theme(axis.text.x = element_text(angle = 65, vjust = 0.75)) + labs(title = "Mycorrhizal Structures Across Genera", x = "Genus", y = "Total Fungal Structures")
补充说明
你提供的图表显示每个属对应的柱子内,不同结构类型的填充高度完全相同,这正是因为原代码没有为每个Type绑定对应的数值,ggplot只能默认均分柱子高度。转换数据格式后,每个类型的真实数量会被正确映射到y轴,堆叠高度就会和实际数据匹配。
内容的提问来源于stack exchange,提问作者Sara S
相关产品推荐
相关产品推荐

