2016-01-25 1 views
6

Je veux réduire un graphe dans ses communautés/grappes respectives. Permettez-moi d'illustrer cela par l'exemple de jouet suivant:Collapse graph en grappes dans igraph

set.seed(123) 

#toy graph 
g <- barabasi.game(10) %>% 
    as.undirected() 

#identify communities 
c_g <- fastgreedy.community(g) 

Il y a trois communautés, comme on le voit dans le graphique suivant.

enter image description here

Je veux réduire l'effondrement des sommets de sorte que les sommets du graphe résultant correspondent à la composition des sommets précédents. Voir le graphique

enter image description here

Je suis nouveau au paquet igraph et je ne suis pas au courant de la meilleure façon de traiter avec igraph objets.

Répondre

8

Vous pouvez essayer contract:

library(igraph) 
set.seed(123) 
g <- barabasi.game(10) %>% as.undirected() 
c_g <- fastgreedy.community(g) 
V(g)$name <- letters[1:vcount(g)] 

g2 <- contract(g, membership(c_g), vertex.attr.comb=toString) 

par(mfrow=c(1,2)) 
plot(g, vertex.color=membership(c_g)) 
plot(simplify(g2), vertex.color=1:vcount(g2)) 

enter image description here