如何消除ggplot相对丰度柱状图中的垂直空白线?
问题排查与解决:ggplot相对丰度柱状图柱子间垂直空白线
问题原因
你的柱状图出现垂直空白线,核心原因是geom_bar默认width参数为0.9,柱子无法填满x轴上对应样本的刻度位置,相邻柱子间会留出间隙;再结合facet_grid的space="free_x"设置,间隙会更明显。
解决方法
1. 消除柱子间隙(核心修复)
在geom_bar中添加width = 1参数,让柱子完全填充每个样本对应的x轴空间,直接消除间隙:
dat %>% ggplot(aes(x = sample_id, y = count)) + facet_grid(~ Group, scales = "free_x", space = "free_x") + geom_bar(aes(fill = Phylum), stat = "identity", position = "fill", width = 1) + # 新增width=1参数 scale_y_continuous(name = "相对丰度", labels = scales::percent) + theme(axis.text.x = element_text(angle = 90, size = 10, face = "bold"), axis.text.y = element_text(color = "black"), strip.text = element_text(face = "bold"), strip.background = element_blank())
2. 可选:优化样本ID排序(避免x轴混乱)
如果样本ID的显示顺序不符合预期,可以将其转为因子并指定排序规则,比如按Group分组排序:
# 绘图前预处理数据,统一样本顺序 dat <- dat %>% arrange(Group, sample_id) %>% mutate(sample_id = factor(sample_id, levels = unique(sample_id)))
额外检查点
- 排查重复行:用
dat %>% count(sample_id, otu_id) %>% filter(n>1)检查是否存在同一样本同一OTU的重复记录,重复行可能导致堆叠异常。 - 过滤未知分类:若
Phylum列存在NA值,可添加filter(!is.na(Phylum))过滤,避免出现未知分类的堆叠块。
内容的提问来源于stack exchange,提问作者Sunirmal Sheet
相关产品推荐
相关产品推荐

