并排侧维恩图过度使用友能(Side-by-side Venn diagram using Venne

2019-07-21 06:12发布

我试图将两个维恩图在一个单一的曲线图,即,我使用的标准杆(mfrow = C(1,2))在开始的时候。 然而,当我使用Venn()函数在Vennerable包:

VennCompare = Venn(SetNames = c("A", "B", "C"), Weight = c(0, 38, 1, 0, 1, 80, 0, 14))
pdf(file="Venn.pdf", width=12, height=6)
par(mfrow=c(1,2))
plot(VennCompare, doWeights=FALSE)
plot(VennCompare, doWeights=TRUE, show = list(SetLabels = TRUE, Faces = FALSE))
dev.off()

将所得的PDF文件中包含2页,并且每一页有一个单一的维恩图。

我怎样才能把两个图到一个单一页面(即并排侧)?

Answer 1:

正如在评论已经讨论的,使用Vennerable网格图形和固定的包的功能内的电网参数。 你或许应该从包维护者恳请他们是否可以在他们的包添加这种功能,但在此期间我给你一个Sketchof黑客攻击,让你做你想要什么:

第一个命令允许你编辑函数调用makevp.eqsc其中似乎包含了电网的定义:

trace("makevp.eqsc",edit=TRUE) 

原代码如下所示:

function (xrange, yrange) 
{
    pushViewport(plotViewport(name = "Vennmar", c(1, 1, 1, 1)))
    pushViewport(viewport(name = "Vennlay", layout = grid.layout(1, 
        1, widths = diff(xrange), heights = diff(yrange), respect = TRUE)))
    pushViewport(viewport(name = "Vennvp", layout.pos.row = 1, 
        layout.pos.col = 1, xscale = xrange, yscale = yrange))
}

最相关的部分grid.layout ,它告诉你,你想画什么样的网格。 此外layout.pos.row和layout.pos.col是重要的,他们告诉在绘制哪个位置。 更改例如这样的代码:

function (xrange, yrange) 
{
    pushViewport(plotViewport(name = "Vennmar", c(1, 1, 1, 1)))
    pushViewport(viewport(name = "Vennlay", layout = grid.layout(2, 
        1, widths = diff(xrange), heights = diff(yrange), respect = TRUE)))
    pushViewport(viewport(name = "Vennvp", layout.pos.row = number, 
        layout.pos.col = 1, xscale = xrange, yscale = yrange))
} 

现在,你会得到两个堆叠的图表,就像这样:

number<-1 #change the argument inside of makevp.eqsc
plot(VennCompare, doWeights=FALSE)
number<-2
plot(VennCompare, doWeights=TRUE, 
  show = list(SetLabels = TRUE, Faces = FALSE),add=TRUE) #note add=TRUE

这看起来并不很不错,但通过修改makevp.eqsc你也许可以archieve更漂亮的效果。



Answer 2:

我不能安装该软件包,但一招,这可能有助于在这里使用grid.grab到绘图捕捉到可以在其他地方放置一个GROB,

library(grid)

myplot <- function(){

  pushViewport(viewport(x=0.5,width=1, just=0.5))
  grid.rect(gp=gpar(fill=grey(runif(1, 0.2, 0.8))))
  grid.points()
  popViewport()

}

p1 <- grid.grabExpr(myplot())
p2 <- grid.grabExpr(myplot())

library(gridExtra)

grid.arrange(p1, p2, ncol=2) 


Answer 3:

试试这个:

v <- Venn(n=2)
plot(v)
grid.text("Title", vp = viewport(x=0.5, y=.9, w=unit(1, "npc"), h=unit(1, "npc")))


文章来源: Side-by-side Venn diagram using Vennerable