Мой вопрос: как я могу принять этот вопрос 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)