使用VennDiagram包在R中缩放三维维恩图

时间:2012-07-30 18:05:54

标签: r venn-diagram

有没有人知道如何让R包VennDiagram根据设定的大小来缩放包含3个相交集的维恩图的圆圈?

我可以通过venneular包实现这种扩展,但我发现与VennDiagram相比,其他图形选项有点受限。

VennDiagram包文档建议将参数'scaled'设置为TRUE应该做的伎俩,但我发现这会产生3个相同大小的圆圈。

包文档确实以密码形式表明缩放参数可能仅适用于某些图表:

?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)

谢谢v.much

吉姆

5 个答案:

答案 0 :(得分:4)

所以回答我自己的问题: 对于某些配置,在数学上不可能创建一个 使用圆圈缩放三维维恩。

答案 1 :(得分:3)

由于可能误导数据的可视化表示,因此禁用了三组维恩图的常规缩放

请尝试使用以下两个工具

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图在适当的情况下使用特定于两组维恩图的缩放,sep.dist或偏移参数。该功能默认将三个圆圈放置成三角形排列,顶部有两组,下面有一组。圆圈以顺时针方式对应于area1,area2和area3,左上角为area1。的 N.B。由于可能误导数据的可视化表示,因此禁用三组维恩图的一般缩放。要重新启用,请将任何值分配给变量 overrideTriple

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

答案 2 :(得分:1)

我改用Vennerable。将数据读入Venn对象有点复杂,但它会生成加权/缩放的三组图表+图形选项。

答案 3 :(得分: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)))

Quasi-proportional Venn diagram

这个R包是初步的,输出控制的选项非常有限。我们正在开发一个新版本,我们正在收到反馈意见。还有一个Web version有更多选项,输出总是可以使用Inkscape等外部工具进行编辑。

答案 4 :(得分:0)

我的解决方案:

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