我正在使用networkD3库在Shiny中创建一个Sankey图。我需要改变一个节点的位置(旋转90d,然后下移)。为此,我使用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)
发布于 2021-03-13 05:57:50
您可以尝试Plotly作为替代方案。您可以尝试指定每个节点的X、Y坐标来定位它们。这样链接就不会消失了。文档:https://plotly.com/r/sankey-diagram/#define-node-position
https://stackoverflow.com/questions/66220773
复制相似问题