2012-10-02 20 views
8

Szukałem odpowiedzi na to pytanie, ale nie mogłem znaleźć żadnej wzmianki, więc zdecydowałem się opublikować tutaj. Próbuję sprawdzić, czy igraph lub jakiekolwiek pakiety zapewniają prosty sposób tworzenia "wykresu społeczności", w którym każdy węzeł reprezentuje społeczność w sieci, a więzi reprezentują więzi między społecznościami. Mogę sprawić, by algorytm wykrywania społeczności działał poprawnie w trybie igraph, ale nie mogłem znaleźć sposobu na zwinięcie wyników, aby pokazać połączenia między społecznościami. Każda pomoc będzie doceniona.generowanie wykresu społeczności w igraph

+1

Tak, można to zrobić za pomocą piktogramu, ale tak naprawdę nie dostarczyłeś niczego odtwarzalnego. Oto blog, który zrobiłem na igraph [(LINK1)] (http://trinkerrstuff.wordpress.com/2012/06/29/igraph-and-structured-text-exploration/) i [(LINK 2)] (http : //trinkerrstuff.wordpress.com/2012/06/30/igraph-and-sna-an-amateurs-dabbling/) Taka autopromocja, ale to pasuje :) Strona do pisania jest bardzo dobra z wieloma przykładami. Ponownie możemy pomóc, korzystając z przykładowego zestawu danych. –

+0

+1 do przykładowych danych. – TARehman

Odpowiedz

19

Możesz po prostu użyć funkcji contract.vertices(). Sparowuje to grupy wierzchołków w jeden wierzchołek, w zasadzie w ten sam sposób, w jaki chcesz. Na przykład.

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

Wygląda na to, że ten kod już nie działa ... –

+2

Naprawiłem to. –

Powiązane problemy