D3桑基图:更改节点位置

3

我正在使用networkD3库在Shiny中创建桑基图。 我需要更改一个节点的位置(将其旋转90度并向下移动)。 为此,我使用js,就像下面的小例子一样。 但是,在更改节点后,我不知道如何更新链接。

library(shiny)
library(networkD3)
library(htmlwidgets)
library(tibble)
library(dplyr)
library(ggplot2)
library(ggforce)


ui <- fluidPage(
  fluidRow(sankeyNetworkOutput("plot"))
)

server <- function(input, output, session) {
  session$onSessionEnded(stopApp)

  URL <- paste0(
    "https://cdn.rawgit.com/christophergandrud/networkD3/",
    "master/JSONdata/energy.json"
  )
  energy <- jsonlite::fromJSON(URL)
  
  output$plot <- renderSankeyNetwork({
    sn <- sankeyNetwork(
      Links = energy$links, Nodes = energy$nodes, Source = "source",
      Target = "target", Value = "value", NodeID = "name",
      units = "TWh", fontSize = 12, nodeWidth = 30, nodePadding = 0,
      width = "100%", sinksRight = FALSE
    )

    update_diagr <-
      'function(el, x) {
          d3.select(el)
          .selectAll(".node rect")
          .filter(function(d) { return d.name.startsWith("National"); })
          .attr("transform", "translate(0 100) rotate(90)");
          
        }'
    onRender(sn, update_diagr)
  })
}

shinyApp(ui, server)

enter image description here

1个回答

0

1
是的,它适用于plotly。但不适用于networkD3。此外,对于这种具有复杂结构的图形,计算节点的特定位置非常困难。 - Olena
我明白了。我曾在相当复杂的桑基图中放置节点,但我只使用了R和Python中的plotly。 - ubergeek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接