networkD3 Sankey Diagrams - 控制节点位置

时间:2018-04-08 13:01:59

标签: r r-markdown sankey-diagram htmlwidgets networkd3

我希望在R Markdown中使用HTML小部件/ Javascript创建一个交互式Sankey图,所以我正在考虑使用networkD3 package。我希望利用的主要交互性是点击节点,使其中突出显示的路径突出显示给用户。

我之前使用Riverplot package创建了静态Sankey图表,您可以在其中指定每列节点的相对位置以及该列中节点的顺序。

回到networkD3产品,我不确定能否以相同,简单的方式控制相对节点位置(垂直和水平)。我发现了一些似乎与我的要求相关的帖子,但是我不清楚哪些(如果有的话)已经在包中实现了,以及&#上的&# 39;愿望清单'

我找到的帖子有:nodesortfixed nodessequence explorer

所以,我的问题是,是否有人可以建议使用最好的R包或技术来创建基于交互式HTML小部件的sankey图,并具有初始(相对)节点位置控制?

1 个答案:

答案 0 :(得分:3)

您可以使用sankeyNetwork()参数有效禁用networkD3iterations = 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)

sanky plot with same order as in the data frame