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
相关产品推荐
相关产品推荐

