1

我正在使用 Shiny 应用程序中的 visNetwork 包构建网络。

在 visNetwork 包中,visOption函数中有一个nodesIdSelection参数来选择/突出显示节点。

但是,我们只能从下拉菜单中选择节点而不是手动输入节点 id在此功能中进行选择。如果下拉菜单中有很多节点 ID,则很难找到节点 ID。

我想知道是否有办法实现这个功能。如果在 visNetwork 中不可能,我正在考虑在 Shiny 中实现可能的功能来解决它​​。

以下是我当前的 visNetwork 代码。

# data used in next examples
nb <- 10
nodes <- data.frame(id = 1:nb, label = paste("Label", 1:nb),
                    group = sample(LETTERS[1:3], nb, replace = TRUE), value = 1:nb,
                    title = paste0("<p>", 1:nb,"<br>Tooltip !</p>"), stringsAsFactors = FALSE)

edges <- data.frame(from = c(8,2,7,6,1,8,9,4,6,2),
                    to = c(3,7,2,7,9,1,5,3,2,9),
                    value = rnorm(nb, 10), label = paste("Edge", 1:nb),
                    title = paste0("<p>", 1:nb,"<br>Edge Tooltip !</p>"))

visNetwork(nodes, edges, height = "500px", width = "100%") %>% 
  visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE) %>%
  visLayout(randomSeed = 123)

提前致谢。

4

1 回答 1

0

您可以使用 Shiny withvisSelectNodes和 set highlightNearestin options 来获得相同的结果。有了这个,您可以根据自己的喜好自定义闪亮小部件目录中的输入。

library(shiny)
library(visNetwork)

server <- function(input, output) {
output$network_proxy_nodes <- renderVisNetwork({
    # minimal example
    nodes <- data.frame(id = 1:3)
    edges <- data.frame(from = c(1,2), to = c(1,3))
    
    visNetwork(nodes, edges) %>% 
        visOptions(highlightNearest = TRUE)
})


observe({
        visNetworkProxy("network_proxy_nodes") %>%
            visSelectNodes(id = input$Focus, highlightEdges = T)
    })

}

ui <- fluidPage(
    fluidRow(
        column(
            width = 4,

            selectInput("Focus", "Focus on node :",
                    c(1:3))
        ),
        column(
            width = 8,
            visNetworkOutput("network_proxy_nodes", height = "400px")
        )
    )
)

shinyApp(ui = ui, server = server)
于 2022-01-14T05:09:48.777 回答