我的问题是,如何使用这个StackOverflow question来使用它,一旦在Shiny应用程序中对节点进行了操作,它就会使用Shiny生成图的坐标,并创建一个坐标导出按钮。这个应用程序很棒,但我想更进一步(?),并有一个将布局导出到矩阵的按钮。现在,用户必须复制并粘贴矩阵。
对于大图形,复制和粘贴坐标可能变得很麻烦。而且,图形的屏幕空间非常有限,这使得操纵节点非常困难。
我已在此处复制了上面的问题/答案代码,并再复制了一点以创建一个适中的2,000个节点大小图,并使用了graphlayouts
包中的layout_with_stress指定了起始布局:
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)