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

如何为R语言eulerr包生成的欧拉图创建面板布局?

解决eulerr包欧拉图的面板布局问题

eulerr包的绘图依赖grid图形系统,你尝试的mfrow/layout/fig都是R基础图形系统的参数,因此无法生效。另外plot.eulergram是S3泛型方法,不能直接调用,需要通过plot()泛型函数传递newpage参数来控制是否新建绘图页面。

下面是几种可行的面板布局方案:

方案1:使用patchwork包(推荐,语法简洁)

patchwork专门用于组合ggplot2/grid类图形,对eulerr的图支持友好:

library(eulerr)
library(patchwork)

# 生成拟合结果
x <- data.table("A" = rep(c(TRUE,FALSE), times = 20),
                "B" = rep(c(TRUE,FALSE), each = 10),
                "C" = rep(c(TRUE,TRUE,FALSE,TRUE), times = 5))
fit.ellipses <- eulerr::euler(combinations = x, shape = "ellipse")

# 生成两个不新建页面的图对象,再按1行2列组合
p1 <- plot(fit.ellipses, newpage = FALSE)
p2 <- plot(fit.ellipses, newpage = FALSE)
p1 | p2

方案2:使用gridExtra包的grid.arrange

gridExtra可直接将多个grid图形排列成面板:

library(eulerr)
library(gridExtra)

fit.ellipses <- eulerr::euler(combinations = x, shape = "ellipse")

# 生成两个不新建页面的图对象
g1 <- plot(fit.ellipses, newpage = FALSE)
g2 <- plot(fit.ellipses, newpage = FALSE)

# 排列为1行2列的面板
grid.arrange(g1, g2, ncol = 2)

方案3:手动使用grid的viewport布局

如果不想额外安装包,可直接用grid系统的viewport手动控制绘图位置:

library(eulerr)
library(grid)

fit.ellipses <- eulerr::euler(combinations = x, shape = "ellipse")

# 仅新建一次页面
grid.newpage()

# 左侧视图窗(占画布左半部分)
pushViewport(viewport(x = 0.25, width = 0.5))
plot(fit.ellipses, newpage = FALSE)
popViewport()

# 右侧视图窗(占画布右半部分)
pushViewport(viewport(x = 0.75, width = 0.5))
plot(fit.ellipses, newpage = FALSE)
popViewport()

关键参数说明

调用plot()时设置newpage = FALSE,是实现面板布局的核心——它会阻止eulerr每次绘图都新建独立的grid页面,让多个图能在同一画布内排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:49:50