2016-07-20 10 views
0

I den Code unten bin mit einem visNetwork in Kreislayoutformat (Bild unten angebracht) erzeugenVisualisieren IGRAPH als innere und äußere Kreis in R

visNetwork(data$nodes,data$edges) %>% visIgraphLayout(layout="layout_in_circle") 

ich das Layout in einer solchen Weise geändert werden soll, dass, grüne Knoten im inneren Kreis und blaue Knoten im äußeren Kreis. Bitte lassen Sie mich wissen, wie dies zu erreichen ist.

Vielen Dank im Voraus. Image Link

Antwort

2

Eine Möglichkeit besteht darin, das Layout in igraph zu erstellen. Sie können es am Ende wieder in visNetwork einspeisen. Ich war mir nicht sicher, ob du den inneren Kreis mit dem äußeren verbinden wolltest. Beide Optionen sind codiert.

Rufen Sie die grünen Knoten nodes1 und die blauen Knoten nodes2 auf, die durch Unterteilung Ihrer Knotenmatrix erstellt wurden.

# edges within nodes1 
edges1 <- edges[edges$from%in%nodes1$id & edges$to%in%nodes1$id, ] 
# edges within nodes2 
edges2 <- edges[edges$from%in%nodes2$id & edges$to%in%nodes2$id, ] 
# edges within nodes1 or 2 = all edges if nodes1, 2 account for all nodes 
edges12 <-edges[edges$from%in%c(nodes2$id,nodes1$id) & 
    edges$to%in%c(nodes2$id,nodes1$id) , ] 

igraph1 <- graph.data.frame(edges1, directed=F, vertices=nodes1) 
igraph2 <- graph.data.frame(edges2, directed=F, vertices=nodes2) 

# inner circle doesn't connect to outer: 
igraph12a <- graph.data.frame(rbind(edges1, edges2), directed = F, 
    vertices = rbind(nodes1, nodes2)) 

# inner circle can connect to outer: 
igraph12b <- graph.data.frame(edges12, directed = F, vertices = 
    rbind(nodes1, nodes2)) 

l1 = layout.circle(igraph1) 
l2 = layout.circle(igraph2) 
l12 = rbind(l1, l2 * 0.5) # 0.5 term scales the inner circle size 

# plot both circles 
plot.igraph(igraph1, layout = l1, rescale = F) 
plot.igraph(igraph2, layout = l2*.5, add = T, rescale = F) 

# plot both circles at once 
plot.igraph(igraph12a, layout = l12, rescale = F) 

# plot both circles with possible connections between them 
plot.igraph(igraph12b, layout = l12, rescale = F) 

Dann, wenn Sie es in visNetwork bevorzugen, können Sie das tun. Stellen Sie sicher, dass Sie eine aktualisierte Version von visNetwork haben, weil die layout.norm mit layoutMatrix Fähigkeit der jüngste Neuzugang ist:

visNetwork(nodes = rbind(nodes1, nodes2), edges = edges12) %>% 
    visIgraphLayout(layout="layout.norm", layoutMatrix = l12) 

Natürlich, werden Sie Knoten Farben auf alle diese hinzufügen möchten.

+0

Danke Jac. Es funktionierte mit dem von Ihnen bereitgestellten Code. – hr02

+0

@ hr02 Wenn jac Antwort Ihre Frage beantwortet, akzeptieren Sie bitte als eine richtige Lösung. Siehe [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Https://stackoverflow.com/help/someone-answers) – G5W