You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中使多行排列的多幅ggplot绘图尺寸一致?

解决R中多图排列尺寸不一致的问题

问题原因

你当前的代码将第一行3个图打包为一个整体、第二行1个图打包为另一个整体,grid.arrange默认会让这两个整体的高度相等,导致第二行的单个图占满整行高度,比第一行的每个图尺寸更大。要让4幅图尺寸完全一致,需要让每个图占据相同的网格单元。

方法1:使用patchwork包(推荐)

patchwork是ggplot2的扩展包,排版逻辑更直观,能轻松实现等尺寸排列:

  1. 安装并加载包:
install.packages("patchwork")
library(patchwork)
  1. 替换原有的grid.arrange代码:
# 第一行放3个图,第二行用空白占位符让第4个图居中,与前3个尺寸一致
(plot_list[[1]] + plot_list[[2]] + plot_list[[3]]) / 
  (plot_spacer() + plot_list[[4]] + plot_spacer()) +
  plot_layout(ncol = 3, heights = c(1, 1))

plot_spacer()作为空白占位,让第二行的图和第一行的每个图占据相同网格空间;heights = c(1,1)保证两行高度一致,最终4个图的宽高完全相同。

方法2:用gridExtra自定义布局矩阵

如果坚持使用gridExtra包,可通过布局矩阵定义每个图的位置,确保单元格大小一致:

  1. 安装并加载包:
install.packages("gridExtra")
library(gridExtra)
  1. 替换原排版代码:
# 定义2行3列的布局,第二行仅中间位置放图,其余为空白
layout_matrix <- rbind(
  c(1, 2, 3),
  c(NA, 4, NA)
)

# 按布局排列,设置两行高度相等
grid.arrange(grobs = grob_list, layout_matrix = layout_matrix, heights = c(1, 1))

layout_matrix指定了每个图的位置,NA代表空白单元格;heights = c(1,1)确保两行高度一致,从而让4个图尺寸统一。

小修正

原代码中arrangeGrob(grobs=grob_list[4:5], ncol =1)的4:5会尝试取第5个图,但你仅生成了4个图,改为4即可,不过使用上述方法后该问题会自动解决。

内容的提问来源于stack exchange,提问作者Yeping Sun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:53:16