使用R中的现有计数创建维恩图?

时间:2014-11-05 16:07:38

标签: r venn-diagram

我想知道我是否可以在R中使用vennDiagram生成维恩图,而不使用vennCounts生成计数矩阵,但保存了类似的矩阵。所以我要说我有这个矩阵:

G S P Counts

1 1 1 117898    
1 1 0 125901    
1 0 1 119360    
0 1 1 118086    
1 0 0 3505      
0 1 0 753       
0 0 1 701       
0 0 0 0 

当我做

时我称之为M.
m <- as.matrix(M)
vennDiagram(m)

我明白了:

  

vennDiagram(m)中的错误:无法绘制超过3组的维恩图

有没有解决这个问题的方法?我试图绕过生成1和0的矩阵,因为我已经有了计数。

2 个答案:

答案 0 :(得分:1)

我想也可以使用这个解决方案,如果个别数字和共享区域可用draw.triple.venn(area1,area2,area3,n12,n23,n13,n123)其中area是teh toatal size和nxy是areax和areay之间的共享区域。 所以 draw.triple.venn(130868,126842,120249,125901,118086,119360,117898),我发送维恩图图像,但我需要更多的声誉!

答案 1 :(得分:0)

这是一种执行它的黑客方式。我生成包含由整数组成的假成员的人工集。但它有效

require(VennDiagram)
lines = "1 1 1 117898    
1 1 0 125901    
1 0 1 119360    
0 1 1 118086    
1 0 0 3505      
0 1 0 753       
0 0 1 701       
0 0 0 0"
con <- textConnection(lines)
data <- read.table(con)
names(data) = c('G','S','P')

close(con)

sets = vector(mode = 'list', length = ncol(data)-1)
names(sets) = names(data)[1:(ncol(data)-1)]
lastElement = 0
for (i in 1:nrow(data)){
    elements = lastElement:(lastElement+data[i,ncol(data)]-1)
    lastElement = elements[length(elements)]+1
    for (j in 1:(ncol(data)-1)){
        if (data[i,j]==1){
            sets[[j]]=c(sets[[j]],elements)
        }
    }
}
laVenn = venn.diagram(sets,filename=NULL)
plot.new()
grid.draw(laVenn)

enter image description here