我试图将两个维恩图放在一个单独的图中,即我在一开始就使用par(mfrow=c(1,2))。但是,当我使用Vennerable
包中的Venn()
函数时:
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页,并且每页都有一个单独的Venn图。
如何将这两个图表放在一个页面中(即并排)?
发布于 2013-03-09 20:09:52
正如在注释中所讨论的,Vennerable使用网格图形并在包函数中修复网格参数。你可能应该向包的维护者询问他们是否可以在他们的包中添加这种功能,但同时我提供了一个技巧的草图,它允许你做你想做的事情:
第一个命令允许您编辑名为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
,你可能会得到更好的结果。
发布于 2013-03-09 20:37:41
我不能安装这个包,但这里有一个技巧可能会有帮助,那就是使用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)
发布于 2014-02-13 05:25:00
试试这个:
v <- Venn(n=2)
plot(v)
grid.text("Title", vp = viewport(x=0.5, y=.9, w=unit(1, "npc"), h=unit(1, "npc")))
https://stackoverflow.com/questions/15314562
复制相似问题