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.
Danke Jac. Es funktionierte mit dem von Ihnen bereitgestellten Code. – hr02
@ 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