Сохранение координат графика из visNetwork и Shiny - PullRequest
0 голосов
/ 07 апреля 2019

Мой вопрос: как я могу принять этот вопрос StackOverflow , который использует Shiny для получения координат графика после манипулирования узлами в приложении Shiny и создания кнопки экспорта координат. Это отличное приложение, но я бы хотел сделать еще один шаг вперед (?) И иметь кнопку, которая экспортирует макет в матрицу. Прямо сейчас пользователь должен скопировать и вставить матрицу.

Копирование и вставка координат может стать громоздкой для больших графиков. Кроме того, экранное пространство для графика довольно ограничено, что затрудняет маневрирование узлов.

Я скопировал приведенный выше код вопроса / ответа, а также немного больше, чтобы создать граф скромного размера из 2000 узлов, и я задаю начальный макет, используя layout_with_stress из пакета graphlayouts:

require(shiny)
library(tidyverse)
library(igraph)
library(graphlayouts)
require(visNetwork)


set.seed(123)
g <- barabasi.game(2000)

layout <- layout_with_stress(g)


g_vis <- toVisNetworkData(g)




nodes <- g_vis$nodes

edges <- g_vis$edges

server <- function(input, output) {

  output$network <- renderVisNetwork({


    visNetwork(nodes, edges) %>% 
      visNodes(color = "green", 
               physics = F) %>%
      visIgraphLayout(layout = "layout.norm", 
                      layoutMatrix = layout)
  })

  output$test <- renderPrint( vals$coords )
  vals <- reactiveValues(coords=NULL)
  observe({
    invalidateLater(1000)
    visNetworkProxy("network") %>% visGetPositions()
    vals$coords <- if (!is.null(input$network_positions)) 
      do.call(rbind, input$network_positions)
  })
  observe({
    input$goButton
    visNetworkProxy("network") %>%
      visGetPositions()
  })


}

ui <- fluidPage(
  fluidRow(
    column(10,visNetworkOutput("network", height = "100%"),
           verbatimTextOutput("test")),
    column(2, actionButton("goButton", "Go!"))
  )

)

shinyApp(ui = ui, server = server)
...