如何在Base R中居中排列5个绘图(3+2两行布局)
实现两行绘图网格,第二行居中显示2个图
方法1:Base R原生layout()函数(无需额外包)
直接自定义布局矩阵,通过调整列宽度让第二行的两个图居中,避免右下角空白:
# 定义布局矩阵:2行3列,第三列第二行设为0表示不绘制图形 layout_matrix <- matrix(c(1, 2, 3, 4, 5, 0), nrow = 2, byrow = TRUE) # 调整列宽度,让第一、第三列宽度为中间列的一半,实现第二行两图居中 layout(layout_matrix, widths = c(0.5, 1, 0.5)) # 依次绘制你的图形 p_1 p_2 p_3 p_4 p_5
方法2:如果是ggplot2图形(用patchwork包更简洁)
patchwork是专门用于拼接ggplot图的工具,用空白占位图配合宽度调整就能轻松实现居中:
library(patchwork) # 第一行放3个图,第二行用空白占位图包裹两个目标图,调整宽度实现居中 (p_1 + p_2 + p_3) / (plot_spacer() + p_4 + p_5 + plot_spacer()) + plot_layout(widths = c(0.25, 1, 1, 0.25))
方法3:ggplot2图形也可用gridExtra包
通过nullGrob()生成空白占位,搭配列宽调整实现布局:
library(gridExtra) # 拆分上下行元素,第二行添加左右空白占位 top_plots <- list(p_1, p_2, p_3) bottom_plots <- list(nullGrob(), p_4, p_5) # 组合布局,设置列宽让第二行两图居中 grid.arrange(grobs = c(top_plots, bottom_plots), nrow = 2, ncol = 3, widths = c(0.5, 1, 0.5))
内容的提问来源于stack exchange,提问作者Gaspar
相关产品推荐
相关产品推荐

