存储来自visNetwork和Shiny的图形坐标

时间:2019-04-07 12:41:17

标签: r shiny visnetwork

我的问题是,如何使用这个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)

0 个答案:

没有答案