2017-09-11 5 views
2

私は光沢のあるアプリの中にnetworkD3パッケージを使用して生成されたシンプルなサニーの図を持っています。 sourceおよび/またはtargetノードはどのようにソートできますか?光沢のあるアプリ内のサンドキー図でソースノードやターゲットノードをソートするにはどうすればいいですか?

デフォルトでは、発信元ノード(A、B、C、D、E)もターゲットノード(V、W、X、Y、Z)もソートされません。少なくとも、並べ替えはわかりません。

sankeyDiagram

コード:

library("shiny") 
library("networkD3") 

ui <- fluidPage(
    column(3), 
    column(6, sankeyNetworkOutput("mySankeyD")), 
    column(3) 
) 

server <- function(input, output) { 
    output$mySankeyD <- renderSankeyNetwork({ 
    myDf <- list(
     nodes=data.frame(name=c("A", "B", "C", "D", "E", 
           "V", "W", "X", "Y", "Z")), 
     links=data.frame(source=as.integer(c(0, 1, 2, 3, 3, 4, 4)), 
         target=as.integer(c(7, 6, 7, 8, 7, 5, 9)), 
         value =   c(1, 4, 1, 5, 1, 5, 3) 
    ) 
    ) 

    sankeyNetwork(Links = myDf$links, Nodes = myDf$nodes, Source = "source", 
        Target = "target", Value = "value", NodeID = "name", 
        units = "TWh", fontSize = 25, nodeWidth = 30, fontFamily = "sans-serif", iterations = 30) 
    }) 
} 

shinyApp(ui, server) 

どうsankeyNetwork()は、ノードの順序を決定するのですか?アルファベット順で並べ替えることは可能ですか?

可能であればソートされたターゲットノードをソートしたいと思います。

EDIT コメントで@ emilliman5が指摘したように、手動でノードをソートすることはできません。

ノードの並べ替えを可能にするSankeyダイアグラムを生成するための他のRパッケージがありますか?はいの場合は、どうすればいいですか?

+1

手動でノードの垂直配置を設定することはできません。 sankeyNetworkはD3.jsを呼び出し、[this post](https://stackoverflow.com/questions/18653784/d3-sankey-is-it-possible-to-affect-or-decide-the-placement-ノードの位置を設定する方法はありません... – emilliman5

+0

Ok。コメントありがとう。 Rのようなサニー・ダイアグラムを作成するための他のツール/パッケージについて知っていますか?私はこの点について私の質問を編集します。 – jmjr

+0

'riverplot'パッケージはこれを可能にしますが、プロットはインタラクティブではありません。 'rCharts'はちょっとした肘のグリースでもやることができるかもしれません。 – emilliman5

答えて

7

sankeyNetwork()の内部にiterations = 0を設定すると、そのトリックが行われました。ノードは、ノードデータフレームと同じ順序でプロットされます。

library("networkD3") 

myDf <- list(
    nodes=data.frame(name=c("A", "B", "C", "D", "E", 
          "V", "W", "X", "Y", "Z")), 
    links=data.frame(source=as.integer(c(0, 1, 2, 3, 3, 4, 4)), 
        target=as.integer(c(7, 6, 7, 8, 7, 5, 9)), 
        value =   c(1, 4, 1, 5, 1, 5, 3) 
    ) 
) 

sankeyNetwork(Links = myDf$links, Nodes = myDf$nodes, Source = "source", 
       Target = "target", Value = "value", NodeID = "name", 
       units = "TWh", fontSize = 25, nodeWidth = 30, 
       fontFamily = "sans-serif", iterations = 0) 
関連する問題