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

求助:使用base R的par函数与ggpubr的ggscatter实现一页多图失败

为什么par()和ggscatter无法一起实现多图同页?

嘿,这个坑我刚学R的时候也踩过!你遇到的问题核心在于:base R的par()函数和ggplot2家族(包括ggpubr的ggscatter)用的是完全不同的绘图系统——base R依赖传统的绘图框架,而ggscatter基于ggplot2,用的是grid绘图系统。par()的布局设置(比如mfrow/mfcol)对grid系统的图完全不起作用,所以每张ggscatter图都会单独生成一个新页面,根本不会按照你预想的排列。

正确的解决方法

既然用了ggpubr,最省心的方式就是用它自带的多图排列工具,或者其他兼容grid系统的包,下面给你三种靠谱的方案:

方案1:用ggpubr自带的ggarrange()(最推荐)

这是和ggscatter最适配的方法,语法也简单:

library(ggpubr)

# 生成示例数据
df1 <- data.frame(x = rnorm(50), y = rnorm(50))
df2 <- data.frame(x = rnorm(50), y = rnorm(50))

# 创建两张散点图
p1 <- ggscatter(df1, x = "x", y = "y", title = "第一张图")
p2 <- ggscatter(df2, x = "x", y = "y", title = "第二张图")

# 1行2列排列
ggarrange(p1, p2, nrow = 1, ncol = 2)

方案2:用gridExtra包的grid.arrange()

这是R里实现ggplot多图排列的经典工具:

library(gridExtra)

# 直接传入两张图,指定行列数
grid.arrange(p1, p2, nrow = 1, ncol = 2)

方案3:用patchwork包(语法最简洁)

如果你喜欢更直观的语法,patchwork绝对是首选,它支持用+号拼接图:

library(patchwork)

# 默认横向排列成1行2列
p1 + p2

# 也可以手动指定布局
p1 + p2 + plot_layout(nrow = 1, ncol = 2)

额外提醒

如果之后你需要把base R的图和ggplot的图混排,就得借助grid包的viewport或者grid.draw()来手动控制布局,但这种场景不多见。你现在的需求用上面任意一种方案都能完美解决~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:21:09