在ggarrange()的2×2布局中,如何单独缩小第四个子图的高度?
解决ggarrange 2×2布局中单个子图高度调整问题
你遇到的问题是因为ggarrange()的heights参数是按行设置整体高度比例,不是针对单个子图的。你设置的heights = c(2,2,2,1)会被忽略后两个值——因为指定了nrow=2,参数只会取前两个值作为两行的高度比例,自然达不到让第四个子图高度减半的效果。
要实现你要的布局,需要通过嵌套ggarrange()拆分布局逻辑:
- 先把第一行的两个子图(p1、p2)拼成完整一行;
- 把第四个子图(p4)和空白区域拼成占满列宽的组合,让p4只占这个组合的上半部分;
- 把第三个子图(p3)和上面的p4组合拼成第二行;
- 最后把上下两行组合起来,统一设置图例。
具体代码如下:
# 拼接第一行的两个子图 top_row <- ggarrange(p1, p2, ncol = 2, labels = c("A", "B")) # 让p4只占右侧列的上半部分,下半部分留空白 bottom_right <- ggarrange(p4, nrow = 2, heights = c(1, 1)) # 拼接第二行:左侧p3,右侧带空白的p4组合 bottom_row <- ggarrange(p3, bottom_right, ncol = 2, labels = c("C", "D")) # 组合上下两行,统一设置图例 fig1 <- ggarrange(top_row, bottom_row, nrow = 2, common.legend = TRUE, legend = "top", heights = c(2, 2))
这样设置后,p4的高度正好是p1、p2、p3的一半,同时保持2×2的布局结构。
内容的提问来源于stack exchange,提问作者knud_r
相关产品推荐
相关产品推荐

