如何最小化ggplot2用patchwork的guide_area()排版时产生的多余空白?
空白问题原因
你遇到的大面积空白本质是plot_layout默认给所有行分配了均等高度:你布局了3行内容(顶部2图行、公共图例行、底部p3行),默认三行高度占比为1:1:1,给公共图例分配的空间远大于实际需要,才会产生多余空白。
解决方法
调整plot_layout的heights参数缩小图例行的高度占比,同时可以通过调整图例边距进一步压缩冗余空白,修改后的代码如下:
library(ggplot2) library(patchwork) p1 <- ggplot(data = mpg, aes(x = fl, y = displ)) + geom_col(aes(fill = cty)) p2 <- ggplot(data = mpg, aes(x = year, y = hwy)) + geom_point(aes(color = drv)) p3 <- ggplot(data = mpg, aes(x = class, y = displ)) + geom_col() + facet_grid(~year) ((p1+p2)/guide_area()/p3) + plot_layout( guides = "collect", # 按行顺序设置高度占比,中间数值对应图例行,越小则图例区域越窄 heights = c(4, 0.6, 5) ) & theme( legend.position = "bottom", # 负边距压缩图例上下的默认留白,数值可按需调整 legend.margin = margin(t = -8, b = -8) )
参数调整说明
heights的三个数值分别对应「顶部双图行」「公共图例行」「底部p3行」的高度比例,你可以根据自己的图例大小、图表尺寸灵活调整中间的数值,通常设置在0.2~1之间即可完全消去多余空白。- 如果调整后仍有少量空白,可以给单个子图添加
plot.margin参数,缩小顶部双图的底部边距、底部p3的顶部边距,进一步压缩间隙。
内容的提问来源于stack exchange,提问作者Daniel Valencia C.
相关产品推荐
相关产品推荐

