gpt4 book ai didi

r - 使用 Vennerable 的并排维恩图

转载 作者:行者123 更新时间:2023-12-03 20:08:48 36 4
gpt4 key购买 nike

我试图将两个维恩图放在一个图中,即我一开始就使用 par(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 页,每页都有一个维恩图。

如何将两个图表放入一个页面(即并排)?

最佳答案

正如评论中已经讨论过的,Vennerable 使用网格图形并修复了包函数内部的网格参数。您可能应该向包维护者询问他们是否可以在他们的包中添加这种功能,但与此同时,我为您提供了一个 Sketchof 一个 hack,它可以让您做你想做的事:

第一个命令允许您编辑名为 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你可能会得到更漂亮的结果。

关于r - 使用 Vennerable 的并排维恩图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15314562/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com