2017-09-22 12 views
1

sankeyNetwork from networkD3パッケージは、ノードを配置するときにほとんど巧妙ですが、ノードを別の場所に水平に配置したい場合があります。 また、エッジの始点を上下に移動したい場合もあります。例えば次のスクリーンショットを撮る:ノードの場合sankeyNetworkでノードとエッジの位置をカスタマイズする方法R

enter image description here

、私は左から4番目の列に右から2列目にB3を移動したいです。同様に、私はB4を2列目の右から5列目から左に移動したいと思います。

エッジについては、最初のエッジ(B1-> B11)の始点をB1の下端に移動したいと考えています。

私は、ソースコードにいくつかの変更を加え、手動で特定の位置に置く必要があると思います。私はこの投稿をjs How to tune horizontal node position in d3 sankeyjsのために見ましたが、Rで何をすべきかはわかりませんが、私はエッジポジションの変更に関するポストは見つけられませんでした。ここで

が複製データとコードです:

load(url("https://github.com/bossaround/question/raw/master/sankeyexample.RData")) 
     # nn is the node, ee is the edge, now create the link (ll)  
     ll <- inner_join(ee, nn, by = c("N1"="name")) %>% 
     rename(source_ID = ID) %>% 
     inner_join(nn, by = c("N2"="name")) %>% 
     rename(target_ID = ID) 

     # Create Sankey Plot 
     sankeyNetwork(
     Links = ll, 
     Nodes = nn, 
     Source = "source_ID", 
     Target = "target_ID", 
     Value = "Value", 
     NodeID = "newname", 
     fontSize = 12, 
     nodeWidth = 40, 
     nodePadding = 20, 
     NodeGroup = "newname" 

    ) 

は、事前にありがとうございます!手動でノードの垂直位置を調整することができますので、あなたは下へ右上B11ノードをドラッグすると、左上B1ノードからのリンクラインが自動的にそのB1の下に調整します

+0

'D3-sankey'のメインのようないくつかの複雑なJSコードで特定のノードの位置を調整するためにロードした後、あなたが実行するために、追加のJSを追加することができますノードの位置をアルゴリズムのように最適化し、リンクの長さを第一の目標として最小限に抑えることで、水平ノードの位置を手動で調整することは根本的にサポートされているか容易になるものではありません。 –

答えて

0
  1. ノード。 the answer to How to tune horizontal node position in d3 sankey.js?で説明しているものを達成するために

  2. 、あなたがしなければならないすべては、私はそれはあなたが実際に何をしたい達成しないと思いますが、あなたのsankeyNetwork()コールにsinksRight = FALSEパラメータを追加しています。

  3. 現在、ノードの水平位置を手動で調整することはできません。コード内で個別に調整することは非常に面倒になりますが、それは個別にd3.selectAll(".node").filter(function(d) { return d.name == "B3" }).attr("transform", function(d) { return "translate(" + (d.x - 300) + "," + d.y + ")"; })

関連する問題