正如评论中已经讨论的那样,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
您可能会获得更好的结果。