2012-10-02 27 views
8

He estado buscando una respuesta a esta pregunta pero no he podido encontrar ninguna mención, así que decidí publicar aquí. Estoy tratando de ver si igraph o cualquier paquete proporciona una forma simple de crear un "gráfico de comunidad" donde cada nodo representa una comunidad en la red y los vínculos representan lazos entre las comunidades. Puedo hacer que el algoritmo de detección de la comunidad funcione bien en igraph, pero no pude encontrar una forma de colapsar los resultados para mostrar simplemente las conexiones entre cada comunidad. Cualquier ayuda sería apreciada.generando un gráfico de comunidad en el igrafo

+1

Sí, esto se puede hacer con igraph, pero realmente no se ha proporcionado nada reproducible. Aquí hay una publicación de blog que hice en igraph [(LINK1)] (http://trinkerrstuff.wordpress.com/2012/06/29/igraph-and-structured-text-exploration/) y [(LINK 2)] (http : //trinkerrstuff.wordpress.com/2012/06/30/igraph-and-sna-an-amateurs-dabbling/) Sí autopromoción, pero encaja :) El sitio web para igraph es muy bueno, con muchos ejemplos también. De nuevo, podemos ayudar aún más con un conjunto de datos de ejemplo. –

+0

+1 a datos de ejemplo. – TARehman

Respuesta

19

Puede simplemente usar la función contract.vertices(). Esto contrae grupos de vértices en un solo vértice, esencialmente de la misma manera que lo desea. P.ej.

library(igraph) 

## create example graph 
g1 <- graph.full(5) 
V(g1)$name <- 1:5  
g2 <- graph.full(5) 
V(g2)$name <- 6:10 
g3 <- graph.ring(5) 
V(g3)$name <- 11:15 
g <- g1 %du% g2 %du% g3 + edge('1', '6') + edge('1', '11') 

## Community structure 
fc <- fastgreedy.community(g) 

## Create community graph, edge weights are the number of edges 
cg <- contract.vertices(g, membership(fc)) 
E(cg)$weight <- 1 
cg2 <- simplify(cg, remove.loops=FALSE) 

## Plot the community graph 
plot(cg2, edge.label=E(cg2)$weight, margin=.5, layout=layout.circle) 
+2

Parece que este código ya no funciona ... –

+2

De hecho, lo arreglé. –

Cuestiones relacionadas