2016-01-25 19 views
6

Chcę zwinąć wykres w odpowiednich społecznościach/klastrach. Pozwól mi to zilustrować następującym zabawkowym przykładem:Schemat zwijania według klastrów w kodzie

set.seed(123) 

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

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

Istnieją trzy społeczności, jak widać na poniższym wykresie.

enter image description here

Chcę zmniejszyć upadku wierzchołki tak, że wierzchołki w otrzymanym wykresie odpowiadają członkostwa poprzednich wierzchołków. Zobacz wykres.

enter image description here

Jestem nowy w opakowaniu igraph i nie jestem zaznajomiony z najlepszym sposobem radzenia sobie z igraph obiektów.

Odpowiedz

8

Można spróbować 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