2014-11-05 87 views
1

我想知道如果我可以生成中的R用vennDiagram维恩图,而不会产生使用vennCounts计数矩阵,但具有保存了相似矩阵。所以我们可以说我有这样的矩阵:使用R中的现有计数创建维恩图?

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) 

我看到:

错误的文氏图(M):不能绘制维恩图超过3套

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

回答

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

+0

虽然我想这不是你要找的。哦,好吧... – OganM 2014-11-05 19:59:59

+0

这正是我要找的!谢谢Ogan。 – 2014-11-06 09:56:13

+0

哦,我以为你想避免创造假对象。 samira的答案可能是一种更好的方法,因为如果你的总物体数量非常高(大约2 * 10^9)并且使用不必要的内存,这可能会失败。 – OganM 2014-11-07 00:22:29

1

我想通一个也可以使用此解决方案,如果德个体数量和共享区的缴费draw.triple.venn(区域1,区域2,区域3,N12,N23,N13, n123)区域是产地大小,nxy是areax和areay之间的共享区域。 所以 draw.triple.venn(130868,126842,120249,125901,118086,119360,117898),我会送的维恩图图像,但我需要更多的声誉,这样做!