使用VennDiagram包在R中缩放三重Venn图

10

有人知道如何让R包VennDiagram根据集合大小缩放三个交叉集合的Venn图中的圆吗?

我可以用venneular包实现这样的缩放,但与VennDiagram相比,我认为它在其他图形选项方面有点受限。

VennDiagram包文档建议将参数'scaled'设置为TRUE应该可以解决问题,但我发现这会产生三个相等大小的圆。

该软件包文档神秘地暗示,scaled参数可能只适用于某些图表:

?draw.triple.venn

揭示:

缩放:
"布尔值,指示是否根据集合大小在某些欧拉图中按比例缩放圆圈大小"

?venn.diagram

#Argument Venn Sizes    Class    Description
#scaled    2, 3         logical  Enable scaling for two-set and certain three-set Euler diagrams.

我的代码的玩具示例:

require(VennDiagram)

venn.plot <- draw.triple.venn(
    area1 = 70,
    area2 = 250,
    area3 = 500,
    n12 = 30,
    n23 = 60,
    n13 = 10,
    n123 = 5,
    category = c("C1", "C2", "C3"),
    fill = c("blue", "red", "green"),
    scaled=TRUE)

tiff(filename = "test.tiff", compression = "none",type = "quartz",antialias = "none")
grid.draw(venn.plot)
dev.off()

同样地,使用 'venn.diagram' 函数的这段代码无法产生所需的缩放效果:

venn.diagram(x=list(A=c(1:15,16:20), B=c(6:15,21:30,100:150), C=c(11:30,200:300)),
         filename="test.tiff",
         fill = c("blue", "yellow", "red"), scaled=TRUE)

非常感谢

Jim

5个回答

6
因此,回答我自己的问题:对于某些配置,使用圆圈创建一个缩放的三向文图图形在数学上是不可能的。

1
在Biostars上有一个类似的帖子说这是不可能的。但是使用省略号,它是可能的。你找到了用R绘制它的方法吗? - userJT

5

由于数据呈现可能会导致误导,三组Venn图的普通比例缩放被禁用。

请尝试使用以下两个工具:

http://bioinformatics.psb.ugent.be/webtools/Venn/ http://bioinfogp.cnb.csic.es/tools/venny/index.html

至于您的问题,请阅读以下说明:

关键点在于在draw.triple.venn中设置overrideTriple

如果euler.d == TRUE,则绘制19个特殊情况的Euler图。在适当的情况下,某些Euler图利用了特定于二元组Venn图的scaled、sep.dist或offset参数。该函数默认将三个圆以三角形排列,其中两个集合位于上方,一个集合位于下方。这些圆按顺时针方向对应于area1、area2和area3,其中area1位于左上方。 N.B.由于可能会误导数据的视觉呈现,因此禁用三组Venn图的一般缩放。要重新启用,请为变量overrideTriple分配任何值

http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf


4
我尝试设置这个变量,但并没有起作用。我运行了原问题中的示例,有时使用overrideTriple(我将其设为TRUE),有时不使用,但输出结果都一样。 - Lauren Fitch
1
关键在于如何设置 'overrideTriple=T' 变量...即在 'draw.triple.venn' 调用之前 - 请参见 @atongsa 的答案。顺便说一句,这似乎也适用于 {VennDiagram} 包中更通用的 'venn.diagram' 调用。 - rocanja
啥??不对圆进行缩放似乎更容易引起误解。不管怎样,谢谢你的提示。 - deltaray

4

我的解决方案:

overrideTriple=T
draw.triple.venn(9, 20, 30, 2, 10, 3, 2, category =
               rep("", 3), rotation = 1, reverse = FALSE, euler.d = F, scaled = F)

1
这对我解决了问题!诀窍在于如何设置 'overrideTriple=T' 变量...即在 'draw.triple.venn' 调用之前。顺便说一句,这似乎也适用于 {VennDiagram} 包中更通用的 'venn.diagram' 调用。 - rocanja

1
如果您考虑采用不同的方法,我们已经开发出了nVennR包,其中包含其他形状来传达区域大小。
mySVG <- plotVenn(list(A=c(1:15,16:20)), list(B=c(6:15,21:30,100:150)), list(C=c(11:30,200:300)))

准比例维恩图

这个R包是初步版本,输出控制选项非常有限。我们正在开发一个新版本,并考虑了我们收到的反馈意见。还有一个Web版本,拥有更多选项,输出结果也可以使用外部工具(如Inkscape)进行编辑。


1
我使用Vennerable代替。将数据读入Venn对象有点复杂,但它可以生成加权/缩放的三集图表和图形选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接