igraphでレイアウトを作成する方法もあります。最後にvisNetworkにフィードバックすることができます。内側のサークルをアウターに接続したいかどうかはわかりませんでした。どちらのオプションもコード化されています。
緑色のノードnodes1
と青色のノードnodes2
をノードマトリックスをサブセット化して作成します。
# 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)
あなたがvisNetworkで好むなら、それを行うことができます。 layoutMatrix機能付きlayout.normが最近追加されたので、あなたがvisNetworkの更新バージョンを持っていることを確認してください:もちろん
visNetwork(nodes = rbind(nodes1, nodes2), edges = edges12) %>%
visIgraphLayout(layout="layout.norm", layoutMatrix = l12)
を、あなたはこれらのすべてにノードの色を追加したいと思うでしょう。
出典
2016-07-21 01:19:32
jac
Thanks Jac。それはあなたによって提供されたコードで動作しました。 – hr02
@ hr02 jacの回答があなたの質問に答えた場合は、合意は正しい解決策です。 「誰かが私の質問に答えたときに何をすべきですか?」(https://stackoverflow.com/help/someone-answers)を参照してください。 – G5W