【问题标题】:Click events for VisNetwork with ShinyVisNetwork with Shiny 的点击事件
【发布时间】:2016-10-07 11:45:38
【问题描述】:

我已经使用 Shiny 中的 visNetwork 包构建了我的网络。我想单击一个节点,然后从数据框中显示有关该节点的信息。我已经能够使用 click 和 nearpoint 函数对散点图执行此操作,例如此处显示的 Shiny 示例中的函数:http://shiny.rstudio.com/gallery/plot-interaction-selecting-points.html

对于我的网络,我已经尝试过:

server <- function(input, output) {
output$network <- renderVisNetwork({
visNetwork(my.nodes, my.edges, 
           height = "100%", width = "100%",
           main = "") %>%
visEvents(hoverNode = "function(nodes){
            Shiny.onInputChange('current_node_id',nodes);
            ;}",
            click = "function(){
            Shiny.onInputChange('click',{node: current_node_id});
            ;}"
  )
})

output$shiny_return <- renderPrint({
if(!is.null(input$current_node_id)){
nearPoints(node.data,click$node, addDist = TRUE )    
}
})

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

但是,我收到一条错误消息,提示“未找到点击对象”

感谢您的帮助。

【问题讨论】:

    标签: r graph vis.js


    【解决方案1】:

    不同点:

    • 你的javascript事件click是错误的。不知道current_node_id,必须用input$click而不是click$node
    • nearPoints 仅用于 plotOutput。不能与 javascript / htmlwidgets 函数一起使用。

    要使用visNetwork 启用这种功能,我刚刚在最新的开发版本中添加了一个新功能visNearestNodes。这是一个简单的例子:

    # install dev version
    devtools::install_github("datastorm-open/visNetwork")
    
    require(visNetwork)
    require(shiny)
    
    nodes <- data.frame(id = 1:15, label = paste("Label", 1:15),
                        group = sample(LETTERS[1:3], 15, replace = TRUE))
    
    edges <- data.frame(from = trunc(runif(15)*(15-1))+1,
                        to = trunc(runif(15)*(15-1))+1)
    
    server <- function(input, output, session) {
      output$network <- renderVisNetwork({
        visNetwork(nodes, edges, 
                   height = "100%", width = "100%",
                   main = "") %>%
          visEvents(click = "function(nodes){
                      Shiny.onInputChange('click', nodes.nodes[0]);
                      ;}"
          )
      })
    
      output$shiny_return <- renderPrint({
        visNetworkProxy("network") %>%
          visNearestNodes(target = input$click)
      })
    }
    
    ui <- fluidPage(
      visNetworkOutput("network"), 
      verbatimTextOutput("shiny_return")  
    )
    
    shiny::shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 你好。我正在新图上尝试这个,它不会打印邻居。我收到一个错误:Warning: Error in rbind.data.frame: invalid list argument: all variables should have the same length。我使用的是相同的代码,它适用于您提供的示例。
    • visNearestNodes 真的很年轻。我刚刚添加了一些控件并更改了数据重建。那么你可以试试最新的github版本吗?如果仍然有错误,请给我发送小数据示例以重现和修复它?
    • 只能显示5个邻居吗?目前,我无法获得超过 5 个的信息。如果是这样,那很好。这仍然太棒了!
    • 您可以在visNearestNodes 中使用maxpoints 参数。默认设置为maxpoints = 5
    • 谢谢!像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2018-07-12
    • 2018-10-21
    • 2017-04-27
    • 2018-03-11
    • 2012-05-17
    相关资源
    最近更新 更多