如何减少ggplot中facet_wrap绘制的箱线图的箱体周边空白?
解决ggplot2箱线图分面后箱体空白过多、间距过大的问题
针对你遇到的分面箱线图左右空白冗余、箱体间距过大的问题,直接给你几个可落地的调整方案:
1. 砍掉x轴两侧多余空白
用scale_x_discrete的expand参数控制x轴的扩展空间,精准减少两侧空白:
gg_bio2 <- ggplot(tf2, aes(x=Paturage, y = log(Biomasse+1), fill = Paturage)) + geom_boxplot(width = 0.25)+ scale_fill_manual(values = col) + scale_x_discrete(expand = c(0.1, 0)) # 第一个数值越小,两侧空白越少,可按需微调 labs(x= "Condition de gestion", y="log(Biomasse+1) (g)") + facet_wrap(vars(Type.fonctionnel), drop = T, nrow = 8)+ theme_bw()+ theme(panel.grid = element_blank(), legend.position="none", strip.background = element_rect(colour="black", fill="white"), axis.title.x = element_text(margin = unit(c(5, 0, 0, 0), "mm")), axis.title.y = element_text(margin = unit(c(0, 5, 0, 0), "mm")), text = element_text(size = 22))
2. 缩小两个箱体的横向间距
通过position_dodge调整箱体的位置间距,配合width参数优化箱体宽度,让两组箱体更紧凑:
gg_bio2 <- ggplot(tf2, aes(x=Paturage, y = log(Biomasse+1), fill = Paturage)) + geom_boxplot(width = 0.3, position = position_dodge(width = 0.4)) # dodge宽度小于箱体宽度时,间距会缩小 scale_fill_manual(values = col) + scale_x_discrete(expand = c(0.1, 0)) labs(x= "Condition de gestion", y="log(Biomasse+1) (g)") + facet_wrap(vars(Type.fonctionnel), drop = T, nrow = 8)+ theme_bw()+ theme(panel.grid = element_blank(), legend.position="none", strip.background = element_rect(colour="black", fill="white"), axis.title.x = element_text(margin = unit(c(5, 0, 0, 0), "mm")), axis.title.y = element_text(margin = unit(c(0, 5, 0, 0), "mm")), text = element_text(size = 22))
3. 调整整体图尺寸避免过窄
如果调整后图体仍过窄,导出时用ggsave指定适配8行分面的宽高比例,保证文字和箱体清晰:
ggsave("biomasse_boxplot.pdf", gg_bio2, width = 10, height = 20, dpi = 300)
可根据实际显示效果微调width和height的数值。
内容的提问来源于stack exchange,提问作者Clara
相关产品推荐
相关产品推荐

