如何一起显示来自visNetwork的节点和边的闪亮输入,而不是分开显示

时间:2019-02-10 00:45:42

标签: r shiny rstudio visnetwork

我正在使用visNetwork软件包在Shiny中构建网络。

显示节点和边输入的功能很有趣。但是,节点和边的输入只能单独显示,而不能一起显示在一个框中。

我遵循以下指令https://datastorm-open.github.io/visNetwork/shiny.html,通过将鼠标悬停在节点和边上来构建交互式节点和边输入。 这是通过在visNetwork软件包的visEvent函数中使用hoverNode / hoverEdge arg来完成的。 这是基于javascript事件中的Shiny.OnInputChange函数

library(visNetwork)
library(shiny)

server <- function(input, output) {
  output$network <- renderVisNetwork({
    # minimal example
    nodes <- data.frame(id = 1:3, label = 1:3)
    edges <- data.frame(from = c(1,2), to = c(1,3))

    visNetwork(nodes, edges) %>%
      visInteraction(hover = TRUE) %>%
      visEvents(hoverNode = "function(nodes) {
        Shiny.onInputChange('current_node_id', nodes);
      ;}"), hoverEdge = "function(edges) {
        Shiny.onInputChange('current_edge_id', edges);
      ;}")
  })

  output$shiny_return <- renderPrint({
    input$current_node_id
  })
}

  output$shiny_return <- renderPrint({
    input$current_edge_id
  })
}

ui <- fluidPage(
  visNetworkOutput("network"),
  verbatimTextOutput("shiny_return")
)

shinyApp(ui = ui, server = server)

基于代码,我有2个renderPrint输出。我想保留1,但是受hoverNode / hoverEdge参数限制。

预先感谢

1 个答案:

答案 0 :(得分:0)

Shiny.onInputChange允许我们为输出指定任何名称。由于在任何给定时间都可以将鼠标悬停在节点或边缘上,因此您可以在JS代码中为节点和边缘都赋予相同的名称,并在Shiny服务器端代码中引用此输入。看起来像这样:

library(visNetwork)
library(shiny)

server <- function(input, output) {
  output$network <- renderVisNetwork({
    # minimal example
    nodes <- data.frame(id = 1:3, label = 1:3)
    edges <- data.frame(from = c(1,2), to = c(1,3))

    visNetwork(nodes, edges) %>%
      visInteraction(hover = TRUE) %>%
      visEvents(hoverNode = "function(nodes) {
                Shiny.onInputChange('unique_id', nodes);
                ;}", hoverEdge = "function(edges) {
    Shiny.onInputChange('unique_id', edges);
    ;}")
  })

  output$shiny_return <- renderPrint({
    input$unique_id
  })
}

ui <- fluidPage(
  visNetworkOutput("network"),
  verbatimTextOutput("shiny_return")
)

shinyApp(ui = ui, server = server)