如何从 R 中的函数内以 png 文件绘制多个维恩图

问题描述 投票:0回答:1

我试图通过打开文件、多次调用该函数,然后调用 dev.off() 将一系列维恩图(使用 VennDiagram 包)打印到单个 png 文件。我可以打印这些图,但它们都打印出来了。我想要它们每页或布局中一个,不介意,只要你能看到每个维恩! :) 我找不到任何有关堆栈溢出的帮助来参考这个相互打印或崩溃的问题。

这是我当前的(最小)代码和虚拟数据。我的真实函数做了很多其他事情并且必须返回其他东西,这就是为什么我在这里放置了一个占位符 return() ,只是为了强调我不能(不想)返回网格对象并且一旦我有了完整的列表,就把它们全部打印出来。这将是明智的做法,但那个位置已被占用......

library(VennDiagram)

plot_Venn <- function(data) {
  venn.plot <- venn.diagram(data, filename = NULL, imagetype = "png")
  grid.draw(venn.plot)
  #grid.newpage()
  return("yay")
}

data.list <- list(list(A = 1:150, B = 121:170),
                  list(A = 3:50,B = 45:55),
                  list(A = 1:10, B = 8:400),
                  list(A = 15:109, B = 8:140),
                  list(A = 40:80, B = 8:55),
                  list(A = 1:100, B = 80:200))
png("testmin.png")
par(mfrow=c(2,3))
# or: grid.layout(ncol = 2,nrow = 3)

lapply(data.list, plot_Venn)

dev.off()

在plot_Venn()中使用grid.newpage()只在png文件中创建一个空白页。 “par()”代码行似乎没有执行任何操作。 grid.layout 也没有尝试。即无论有或没有这些线,绘图都会打印在彼此的顶部。但当涉及到布局时,我仍然在黑暗中跌跌撞撞! 我想我也可以将每个维恩打印在单独的文件中,然后将它们组合起来,但重点不是用一千个维恩使文件夹变得混乱,只需制作一个整洁的文件即可。 任何帮助将不胜感激,谢谢!

更新:我只是尝试从函数返回绘图,但我也无法让它工作 - 即使从列表中,它们仍然打印在彼此之上或根本不打印。

r plot png venn-diagram
1个回答
0
投票

嗯,最终我自己找到了解决方案。所以万一其他人需要它...... 诀窍是将其放入 pdf 文件中(如果你对此很满意的话 - 我也是)。我已经到了一半,因为在 venn.diagram() 中使用 filename=NULL 使它返回一个网格对象。然后,即使网格对象是用 imagetype="png" 制作的,您也可以将其粘贴到 pdf 中。在 pdf 中, grid.newpage() 工作得很好。如果你想要它在 png 中,我仍然一无所知:)这是解决方案代码:

plot_Venn <- function(data) {
    venn.plot <- venn.diagram(data, filename = NULL, imagetype = "png")
    grid.newpage()
    grid.draw(venn.plot)
    return("yay")
}

data.list <- list(list(A = 1:150, B = 121:170),
              list(C = 3:50,D = 45:55),
              list(E = 1:10, EF = 8:400),
              list(G = 15:109, H = 8:140),
              list(I = 40:80, J = 8:55),
              list(K = 1:100, L = 80:200))

pdf("testmin.pdf")
lapply(data.list, plot_Venn)
dev.off()
© www.soinside.com 2019 - 2024. All rights reserved.