如何在 Shiny 中使用 visNetworkProxy 与基于节点 ID 的节点进行交互
How to use visNetworkProxy in Shiny to interact with Nodes based on Nodes ids
我正在 Shiny 应用程序中构建网络分析。
我想使用 visNetworkProxy 函数基于 nodes interact (focus/select) nodes ids.
但是,UI 中的 selectInput 中的 "nodes$id" 必须是 预定义的 。在这种情况下,我必须 在服务器外 而不是在服务器内定义节点和边。
由于我的项目的性质,我必须在服务器中保留定义的节点和边,以便使它们与数据库保持同步。
下面是我的代码:
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) %>% visNodes(color = "blue")
})
observe({
visNetworkProxy("network_proxy_nodes") %>%
visFocus(id = input$Focus, scale = 4)
})
observe({
visNetworkProxy("network_proxy_nodes") %>%
visNodes(color = input$color)
})
}
ui <- fluidPage(
fluidRow(
column(
width = 4,
selectInput("color", "Color :",
c("blue", "red", "green")),
selectInput("Focus", "Focus on node :",
nodes$id)
),
column(
width = 8,
visNetworkOutput("network_proxy_nodes", height = "400px")
)
)
)
shinyApp(ui = ui, server = server)
我想知道是否有办法与具有 nodes$id 的节点交互,同时将节点和边保留在服务器 内。
提前致谢!
这是有用的东西。您需要根据节点动态呈现 selectInput
。
library(shiny)
server <- function(input, output) {
# minimal example
nodes <- data.frame(id = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
output$network_proxy_nodes <- renderVisNetwork({
visNetwork(nodes, edges) %>% visNodes(color = "blue")
})
observeEvent(input$Focus, {
visNetworkProxy("network_proxy_nodes") %>%
visFocus(id = input$Focus, scale = 4)
})
observeEvent(input$color, {
visNetworkProxy("network_proxy_nodes") %>%
visNodes(color = input$color)
})
output$choose_node <- renderUI({
selectInput("Focus", "Focus on node :",
nodes$id)
})
}
ui <- fluidPage(
fluidRow(
column(
width = 4,
selectInput("color", "Color :",
c("blue", "red", "green"))
),
column(
width = 8,
visNetworkOutput("network_proxy_nodes", height = "400px"),
uiOutput("choose_node")
)
)
)
shinyApp(ui = ui, server = server)
编辑
根据您的评论,添加一个按钮。
library(shiny)
server <- function(input, output) {
# minimal example
nodes <- data.frame(id = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
output$network_proxy_nodes <- renderVisNetwork({
visNetwork(nodes, edges) %>% visNodes(color = "blue")
})
observeEvent(input$focus_now, {
visNetworkProxy("network_proxy_nodes") %>%
visFocus(id = input$Focus, scale = 4)
})
observeEvent(input$color, {
visNetworkProxy("network_proxy_nodes") %>%
visNodes(color = input$color)
})
output$choose_node <- renderUI({
selectInput("Focus", "Focus on node :",
nodes$id)
})
}
ui <- fluidPage(
fluidRow(
column(
width = 4,
selectInput("color", "Color :",
c("blue", "red", "green"))
),
column(
width = 8,
visNetworkOutput("network_proxy_nodes", height = "400px"),
uiOutput("choose_node"),
actionButton("focus_now", "FOCUS")
)
)
)
shinyApp(ui = ui, server = server)
我正在 Shiny 应用程序中构建网络分析。
我想使用 visNetworkProxy 函数基于 nodes interact (focus/select) nodes ids.
但是,UI 中的 selectInput 中的 "nodes$id" 必须是 预定义的 。在这种情况下,我必须 在服务器外 而不是在服务器内定义节点和边。
由于我的项目的性质,我必须在服务器中保留定义的节点和边,以便使它们与数据库保持同步。
下面是我的代码:
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) %>% visNodes(color = "blue")
})
observe({
visNetworkProxy("network_proxy_nodes") %>%
visFocus(id = input$Focus, scale = 4)
})
observe({
visNetworkProxy("network_proxy_nodes") %>%
visNodes(color = input$color)
})
}
ui <- fluidPage(
fluidRow(
column(
width = 4,
selectInput("color", "Color :",
c("blue", "red", "green")),
selectInput("Focus", "Focus on node :",
nodes$id)
),
column(
width = 8,
visNetworkOutput("network_proxy_nodes", height = "400px")
)
)
)
shinyApp(ui = ui, server = server)
我想知道是否有办法与具有 nodes$id 的节点交互,同时将节点和边保留在服务器 内。
提前致谢!
这是有用的东西。您需要根据节点动态呈现 selectInput
。
library(shiny)
server <- function(input, output) {
# minimal example
nodes <- data.frame(id = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
output$network_proxy_nodes <- renderVisNetwork({
visNetwork(nodes, edges) %>% visNodes(color = "blue")
})
observeEvent(input$Focus, {
visNetworkProxy("network_proxy_nodes") %>%
visFocus(id = input$Focus, scale = 4)
})
observeEvent(input$color, {
visNetworkProxy("network_proxy_nodes") %>%
visNodes(color = input$color)
})
output$choose_node <- renderUI({
selectInput("Focus", "Focus on node :",
nodes$id)
})
}
ui <- fluidPage(
fluidRow(
column(
width = 4,
selectInput("color", "Color :",
c("blue", "red", "green"))
),
column(
width = 8,
visNetworkOutput("network_proxy_nodes", height = "400px"),
uiOutput("choose_node")
)
)
)
shinyApp(ui = ui, server = server)
编辑
根据您的评论,添加一个按钮。
library(shiny)
server <- function(input, output) {
# minimal example
nodes <- data.frame(id = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
output$network_proxy_nodes <- renderVisNetwork({
visNetwork(nodes, edges) %>% visNodes(color = "blue")
})
observeEvent(input$focus_now, {
visNetworkProxy("network_proxy_nodes") %>%
visFocus(id = input$Focus, scale = 4)
})
observeEvent(input$color, {
visNetworkProxy("network_proxy_nodes") %>%
visNodes(color = input$color)
})
output$choose_node <- renderUI({
selectInput("Focus", "Focus on node :",
nodes$id)
})
}
ui <- fluidPage(
fluidRow(
column(
width = 4,
selectInput("color", "Color :",
c("blue", "red", "green"))
),
column(
width = 8,
visNetworkOutput("network_proxy_nodes", height = "400px"),
uiOutput("choose_node"),
actionButton("focus_now", "FOCUS")
)
)
)
shinyApp(ui = ui, server = server)