Получение данных узла и ребра из графика visNetwork

#r #graph #shiny #vis.js

#r #График #блестящий #vis.js

Вопрос:

Я пытаюсь получить данные узлов / ребер из моего графика visNetwork. Я использую пример кода, но он не работает. Я пытаюсь сделать это с помощью Shiny. Моя цель — получить данные узлов и ребер из сети, а затем отобразить их в таблице. Я буду очень признателен за любую помощь, которую я могу получить. Спасибо,

Вот мой код:

 require(shiny)
require(visNetwork)

server <- function(input, output) {

  output$network_proxy_nodes <- renderVisNetwork({
    nodes <- data.frame(id = 1:3)
    edges <- data.frame(from = c(1,2), to = c(1,3))

    visNetwork(nodes, edges) %>% visNodes(color = "green")
  })


  output$edges_data_from_shiny <- renderPrint({
    if(!is.null(input$network_proxy_get_edges)){
      input$network_proxy_get_edges
    }
  })

  observe({
    input$getEdges
    visNetworkProxy("network_proxy_get") %>%
      visGetEdges()
  })

  output$nodes_data_from_shiny <- renderPrint({
    if(!is.null(input$network_proxy_get_nodes)){
      input$network_proxy_get_nodes
    }
  })

  observe({
    input$getNodes
    visNetworkProxy("network_proxy_get") %>%
      visGetNodes()
  })
}

ui <- fluidPage(
     visNetworkOutput("network_proxy_nodes", height = "100%"),
           verbatimTextOutput("edges_data_from_shiny "),
           verbatimTextOutput("nodes_data_from_shiny"),
           actionButton("getNodes", "Nodes"),
           actionButton("getEdges", "Edges")
  )

shinyApp(ui = ui, server = server)
  

Ответ №1:

Основная проблема с кодом заключается в том, что имя сети output$network_proxy_nodes не везде было одинаковым.

Это рабочий фрагмент кода для получения информации о границе и отображения ее в виде обычного текста, а также для получения информации об узле и отображения ее в виде таблицы данных:

 require(shiny)
require(visNetwork)

server <- function(input, output, session) {
  nodes <- data.frame(id = 1:3, 
                      name = c("first", "second", "third"), 
                      extra = c("info1", "info2", "info3"))
  edges <- data.frame(from = c(1,2), to = c(1,3), id= 1:2)

  output$network_proxy <- renderVisNetwork({
    visNetwork(nodes, edges)
  })


  output$nodes_data_from_shiny <- renderDataTable({
    if(!is.null(input$network_proxy_nodes)){
      info <- data.frame(matrix(unlist(input$network_proxy_nodes), ncol = dim(nodes)[1],
                        byrow=T),stringsAsFactors=FALSE)
      colnames(info) <- colnames(nodes)
      info
    }
  })
  output$edges_data_from_shiny <- renderPrint({
    if(!is.null(input$network_proxy_edges)){
      input$network_proxy_edges
    }
  })

  observeEvent(input$getNodes,{
    visNetworkProxy("network_proxy") %>%
      visGetNodes() 
  })

  observeEvent(input$getEdges, {
    visNetworkProxy("network_proxy") %>%
      visGetEdges()
  })
}

ui <- fluidPage(
  visNetworkOutput("network_proxy", height = "400px"),
  verbatimTextOutput("edges_data_from_shiny"),
  dataTableOutput("nodes_data_from_shiny"),
  actionButton("getEdges", "Edges"),
  actionButton("getNodes", "Nodes")
)

shinyApp(ui = ui, server = server)
  

Комментарии:

1. Большое спасибо! Я смог заставить этот код работать. Лучший, SB

2. Добро пожаловать @AquieJo ! Если это сработало для вас, вы можете принять это как «лучший ответ» (чтобы слева от ответа появилась зеленая галочка, и другие люди знали, что он отвечает на ваш вопрос).