【问题标题】:How to sort source and/or target nodes in a sankey diagram within a shiny app?如何在闪亮的应用程序中对 sankey 图中的源和/或目标节点进行排序?
【发布时间】:2018-02-20 05:00:02
【问题描述】:

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

正如您在 MWE 中看到的,默认情况下,源节点(A、B、C、D、E)和目标节点(V、W、X、Y、Z)都没有排序。至少,我无法理解排序。

代码:

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 包可以生成允许对节点进行排序的 sankey 图?如果是,怎么做?

【问题讨论】:

  • 我认为您不能手动设置节点的垂直位置。 sankeyNetwork 调用 D3.js 并且根据this post 没有办法设置节点位置...
  • 好的。感谢您的评论。您知道在 R 中生成此类 sankey 图的其他工具/包吗?我将在这方面编辑我的问题。
  • riverplot 包允许您执行此操作,但绘图不是交互式的。 rCharts 用一点肘部油脂也许也能做到。

标签: r sorting shiny sankey-diagram networkd3


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2015-12-22
    • 2019-12-11
    • 2019-12-14
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多