2017-10-02 12 views
1

私はこのRで整列したノードを持つ有向グラフを作成するには?

enter image description here の有無にかかわらず、ラベルが、整列ノードとネットワークグラフのようなものを取得したいと思います。 どうすれば入手できますか?

私は既にDiagrammerとVisnetworkのパッケージを他のグラフに使用していますので、同じものを使用するとボーナスになります。ダイアグラマで

library(DiagrammeR) 
library(visNetwork) 

from=c("A","A","A","A","B","B","B","C","C","D") 
to=c("B","C","D","E","C","D","E","D","E","E") 
nodesd=c("A","B","C","D","E") 

nodes <- create_node_df( n=length(nodesd), label=nodesd, width=0.3) 
edges <- create_edge_df(from = factor(from, levels=nodesd), to = factor(to, levels=nodesd), rel = "leading_to") 
graph <- create_graph(nodes_df = nodes, edges_df = edges) 
render_graph(graph) 

enter image description here

私もset_node_positionで試してみた()が、すべての違いを確認していないようです。 Visnetwork

nodes <- data.frame(id=nodesd, label= nodesd) 
edges <- data.frame(from=from, to =to, length=150) 
visNetwork(nodes,edges, width="100%" , height="100%") %>% 
visNodes(shape = "circle") %>% visEdges(arrows = 'to', smooth =T) 

enter image description here

あなたはノードが整列されていない見ることができるように。どうすればそれを強制することができますか?

私はそれらを手動でドラッグすることができますが、多くのグラフを持っている場合にはやりたいことではありません。とにかく結果は良くありません。

enter image description here

私は最後にライン

%>% visHierarchicalLayout() 

を追加することにより、visnetwork垂直にそれを行うようになりました。しかし、多くのエッジが消えてしまい、うまく動作しません。

enter image description here

私は、ノードの定義にこれを追加する必要が水平alignementを取得したい場合。

level = c(1,1,1,1,1) 

enter image description here

+0

他のソリューション...また – skan

答えて

2

私はDiagrammeRまたはvisNetworkのお手伝いをすることはできませんが、igraphでこれを行うのは簡単です。ノードの単純なレイアウトを指定するだけです。また、エッジの曲率を調整する必要があります。下の私の例はうまくいきますが、もっと芸術的にするために調整するかもしれません。 TikZ、IGRAPHと

library(igraph) 
EL = cbind(from, to) 
g = graph_from_edgelist(EL) 

L = cbind(1:5, 5:1) 
CURVE = c(0,0.15, 0.3, 0.45, 0, -0.15, -0.3, 0, 0.15, 0) 
plot(g, layout=L, edge.curved=CURVE) 

Graph with Layout

+0

は、手動で曲率を指定する必要性を回避するために、どのような方法がありません歓迎していますか? – skan

+2

あなたは単にedge.curved = TRUEを使うことができますが、結果は醜いです。私はあなたのような写真を撮ろうとしていました。 – G5W

関連する問題