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

