r - 如何使 forceNetwork {networkD3} 以 Shiny 应用程序为中心?

标签 r shiny networkd3

在构建一个显示 forceNetwork 图的 Shiny 应用程序时,网络不会保持居中,而是在交互式更改不透明度时移出视野。

我的问题是,如何改变这种行为并使网络像最初一样很好地居中?

一个可重现的例子:

用户界面:

library(shiny)
library(networkD3)

shinyUI(fluidPage( 

      titlePanel("ForceNetD3"), 

      sidebarLayout(
            sidebarPanel(
               sliderInput("opacity",
                      "Opacity",
                       min = 0.1,
                       max = 1,
                       value = 0.4)
      ),
      mainPanel(
            forceNetworkOutput(outputId = "net")
      )
)))

服务器.R:
library(shiny)
library(networkD3)

shinyServer(function(input, output) {

       # Load data
       data(MisLinks)
       data(MisNodes)      

       output$net <- renderForceNetwork(forceNetwork(
                          Links  = MisLinks, Nodes   = MisNodes,
                          Source = "source", Target  = "target",
                          Value  = "value",  NodeID  = "name",
                          Group  = "group",  opacity = input$opacity))
})

图片中的行为:

enter image description here
enter image description here
Annndd...它不见了:

enter image description here

最佳答案

问题是 d3.force() 中的计时器即将用完,并且在输入新值时不会“重新加热”。在不更改 networkD3 的情况下,您可以通过添加 colourScale = JS('force.alpha(1); force.restart(); d3.scaleOrdinal(d3.schemeCategory20);') 来破解它的工作。您在 forceNetwork() 中的论点功能。所以你会有 server.R ...

library(shiny)
library(networkD3)

shinyServer(function(input, output) {

       # Load data
       data(MisLinks)
       data(MisNodes)      

       output$net <- renderForceNetwork(forceNetwork(
                          Links  = MisLinks, Nodes   = MisNodes,
                          Source = "source", Target  = "target",
                          Value  = "value",  NodeID  = "name",
                          Group  = "group",  opacity = input$opacity,
                          colourScale = JS('force.alpha(1); force.restart(); d3.scaleOrdinal(d3.schemeCategory20);')))
})

更新 (2017.03.20)

此问题已在 networkD3 的最新发布版本 (0.4) 中得到解决,并且 OP 要求的是默认行为。

关于r - 如何使 forceNetwork {networkD3} 以 Shiny 应用程序为中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42764760/

相关文章:

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

r - 如何在 Shiny 上对 networkD3 中的数据进行子集化?

r - networkD3 中 sankeyNetwork 的绘图不显示输出,也不在 R 中生成任何警告/错误

java - 保留:连接被拒绝:连接

r - 使用 rMarkdown 自动生成报告

r - 在Shiny应用程序中删除DT数据表的行

css - ShinyDashboard - 使用 CSS 缩放

r - 如何删除 gt 表中的一行列标签?

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

r - 在 Shiny 应用中跟踪用户事件