如何在闪亮的应用程序中的sankey图中对源和/或目标节点进行排序? [英] How to sort source and/or target nodes in a sankey diagram within a shiny app?

查看:197
本文介绍了如何在闪亮的应用程序中的sankey图中对源和/或目标节点进行排序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的sankey图,使用闪亮的应用程序中的networkD3包生成. source和/或target节点如何排序?

I have a simple sankey diagram, generated using networkD3 package inside a shiny app. How can source and/or target nodes be sorted?

如您在MWE中所见,默认情况下,源节点(A,B,C,D,E)和目标节点(V,W,X,Y,Z)都不会排序.至少我无法理解排序.

As you can see in the MWE, by default, neither source nodes (A, B, C, D, E) nor target nodes (V, W, X, Y, Z) are sorted. At least, sorting is not comprehensible to me.

代码:

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()如何确定节点的顺序?可以按字母顺序对它们进行排序吗?

How does sankeyNetwork() determine the order of nodes? Is it possible to sort them alphabetically?

我想对源节点进行排序,如果可能的话,还对目标节点进行排序.

I'd like to have sorted source nodes, if possible also sorted target nodes.

编辑 正如@ emilliman5在评论中指出的那样,无法对节点进行手动排序.

EDIT As @emilliman5 pointed out in the comment, it is no possible to sort the nodes manually.

因此,还有其他R软件包可以生成允许对节点进行排序的sankey图吗?如果是,该怎么办?

Thus, are there other R packages out there to generate sankey diagrams that allow sorting of nodes? If yes, how to do so?

推荐答案

sankeyNetwork()内部设置iterations = 0可以达到目的.现在,节点的绘制顺序与节点数据框中的顺序相同.

Setting iterations = 0 inside sankeyNetwork() did the trick. Now nodes are plotted the same order as in the nodes dataframe.

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)

这篇关于如何在闪亮的应用程序中的sankey图中对源和/或目标节点进行排序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆