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

R语言如何用ggarrange将3个ggplot图表居中排列在绘图窗口

ggplot2组合图第二行单图居中实现方案

ggarrange默认按传入顺序从左到右、从上到下填充绘图位,因此3张图在2行2列布局下会自动把第三张放在第二行最左侧,可通过以下两种方法调整为居中显示:

方法1:沿用ggpubr包,通过占位图+宽度调整实现

不需要额外安装新包,插入透明无内容的空图作为占位,调整列宽比例让第三张图落在第二行居中位置即可:

library(ggplot2)
library(ggpubr)

# 示例绘图
plot1 = ggplot(data.frame(x = 1:3, y = 4:6), aes(x = x, y = y)) + geom_line()
plot2 = ggplot(data.frame(x = 1:3, y = 4:6), aes(x = x, y = y)) + geom_line()
plot3 = ggplot(data.frame(x = 1:3, y = 4:6), aes(x = x, y = y)) + geom_line()

# 生成完全透明的无内容占位图
empty_plot <- ggplot() + theme_void()

# 分步拼接控制精度更高
row_top <- ggarrange(plot1, plot2, ncol = 2, align = "h")
row_bottom <- ggarrange(empty_plot, plot3, empty_plot, 
                        ncol = 3, 
                        widths = c(0.5, 1, 0.5)) # 左右占位宽度为单图的一半,保证中间图宽度与上方一致
final_plot <- ggarrange(row_top, row_bottom, nrow = 2, align = "v")
print(final_plot)

方法2:使用patchwork包自定义布局(推荐)

patchwork包支持直接通过文本定义布局矩阵,不需要手动生成占位图,代码逻辑更清晰,调整布局更灵活:

# 首次使用请先安装
# install.packages("patchwork")
library(patchwork)

# 用文本定义布局:
# 第一行1、2分别代表plot1、plot2,各占2个单位宽度
# 第二行#代表留空,3代表plot3占中间2个单位宽度,左右留空
my_layout <- "
1122
#33#
"

# 直接按布局拼接图表
plot1 + plot2 + plot3 + plot_layout(design = my_layout, align = "h")

原默认排布效果参考

默认排布效果:第三张图位于第二行左侧

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:03:31