维恩网络图?

时间:2015-09-17 16:24:43

标签: r igraph venn-diagram

我在R上使用igraph,并希望创建一个包含多个网络的维恩图,以显示他们分享的边数。我还没有想出一个简单的方法来做到这一点。

例如:

> net1 <- graph.data.frame(data.frame(a=letters[1:10],b=letters[11:20]),
+                          directed=F)
> net2 <- graph.data.frame(data.frame(a=c(letters[1:5],letters[15:25]),
+                          b=c(letters[11:20],letters[c(21:26)])),
+                          directed=F)
> 
> net1_2 <- graph.intersection(net1,net2,keep.all.vertices=F)
> 
> net1
IGRAPH UN-- 20 10 -- 
+ attr: name (v/c)
> net2
IGRAPH UN-- 21 16 -- 
+ attr: name (v/c)
> net1_2
IGRAPH UN-- 15 5 -- 
+ attr: name (v/c)

然后做这样的事情,但这也适用于多个网络,而不仅仅是2:

GraphsVenn(net1,net2)

enter image description here

如果你在想我为什么不只是绘制合并的网络并为它的交叉点着色,因为网络很大而且会很乱。

谢谢!

1 个答案:

答案 0 :(得分:0)

我不是igraph方面的专家,但是我认为您可以得到一条边列表,这些边可能是我的<Deterministic>false</Deterministic> 包裹的输入(其他):

nVennR

结果:

edges

然后您可以查询每个区域中的元素:

library(igraph)
library(nVennR)

net1 <- graph.data.frame(data.frame(a=letters[1:10],b=letters[11:20]), directed=F)
net2 <- graph.data.frame(data.frame(a=c(letters[1:5],letters[15:25]), b=c(letters[11:20],letters[c(21:26)])), directed=F)

myV <- plotVenn(list(net1=as_ids(E(net1)), net2=as_ids(E(net2))))

此软件包可以处理任意数量的集合,尽管六套以上确实很慢,而且信息量也不大。如果您有兴趣,可以在vignette中找到更多信息。