Венн схема сетей?

Я использую igraph на R и хотел бы создать диаграмму Венна для нескольких сетей, чтобы показать, сколько ребер они разделяют. Я не нашел простой способ сделать это.

Например:

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

Если вы думаете, почему я не просто рисую объединенную сеть и окрашиваю пересечение, это потому, что сети огромны, и это будет беспорядок.

Спасибо!

0 ответов

Я не эксперт по igraph, но я думаю, что вы можете получить список ребер, которые могут быть входными для (среди прочего) моего nVennR пакет:

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

И результат:

Затем вы можете запросить элементы в каждом регионе:

> listVennRegions(myV)
$`0, 1 (net2)`
 [1] "o|p" "p|q" "q|r" "r|s" "s|t" "t|u" "u|v" "v|w" "w|x" "x|y" "y|z"

$`1, 0 (net1)`
[1] "f|p" "g|q" "h|r" "i|s" "j|t"

$`1, 1 (net1, net2)`
[1] "a|k" "b|l" "c|m" "d|n" "e|o"

Этот пакет может обрабатывать любое количество наборов, хотя более шести действительно медленные и не очень информативные. Если вы заинтересованы, есть виньетка с дополнительной информацией.

Другие вопросы по тегам