r - 如何在 Shiny 的应用程序中对桑基图中的源和/或目标节点进行排序?

标签 r sorting shiny sankey-diagram networkd3

我有一个简单的桑基图,是使用 Shiny 的应用程序内的 networkD3 包生成的。如何对和/或目标节点进行排序?

正如您在 MWE 中看到的,默认情况下,源节点(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() 如何确定节点的顺序?是否可以按字母顺序对它们进行排序?

我希望对源节点进行排序,如果可能的话也对目标节点进行排序。

编辑 正如 @emilliman5 在评论中指出的那样,不可能手动对节点进行排序。

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

最佳答案

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)

关于r - 如何在 Shiny 的应用程序中对桑基图中的源和/或目标节点进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46164391/

相关文章:

r - 根据 tibble 中的数据发送电子邮件

R 数据帧按类别 ID 筛选多个逻辑条件

R:如何优雅地将代码逻辑与UI/html-tags分开?

android - SQLite 跨表跨列排序

C-Qsort : Sort name in ascending order and grade in descending order

r - Shiny 和 ggplot - 使小组变得 react 困难

r - Plotly shift event_data 返回中未显示的国家( Shiny )

r - 在 kableExtra() 中控制行高

r - 将 R 中的文本文件与不同的分隔符组合在一起

c++ - 计算间隔内值数量的更有效方法?