création d'un graphique communautaire dans iggraph

j'ai cherché une réponse à cette question mais je n'ai pu trouver aucune mention, donc j'ai décidé de poster ici. J'essaie de voir si igraph ou n'importe quels paquets fournissent un moyen simple de créer un "graphe de communauté" où chaque noeud représente une communauté dans le réseau et les liens représentent des liens entre les communautés. Je peux faire en sorte que l'algorithme de détection de la communauté fonctionne bien dans igraph, mais je n'ai pas pu trouver un moyen de réduire les résultats pour montrer simplement les liens entre chaque communauté. Tout de l'aide serait appréciée.

9
demandé sur krishnab 2012-10-02 18:57:24

1 réponses

Vous pouvez simplement utiliser le contrat.les sommets() fonction. Cela contracte des groupes de vertices en un seul vertex, essentiellement de la même façon que vous le voulez. E. g.

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)
20
répondu Gabor Csardi 2014-07-30 13:15:04