在R Shiny中使用复选框以交互方式过滤visNetwork中的节点/边,可以通过以下步骤实现:
checkboxGroupInput
函数创建复选框,并设置选项为节点/边的属性。ui <- fluidPage(
checkboxGroupInput("filter", "选择要过滤的属性:",
choices = c("属性1", "属性2", "属性3"),
selected = NULL)
)
observeEvent
函数监听复选框的变化,并根据选择的属性过滤visNetwork中的节点/边。可以使用updateVisNetwork
函数更新visNetwork图。server <- function(input, output) {
observeEvent(input$filter, {
filtered_nodes <- nodes_data[nodes_data$属性 %in% input$filter, ]
filtered_edges <- edges_data[edges_data$属性 %in% input$filter, ]
updateVisNetwork(
session = session,
"network",
nodes = filtered_nodes,
edges = filtered_edges
)
})
}
在上述代码中,nodes_data
和edges_data
是包含节点和边数据的数据框,属性
是节点/边的属性列名。
server <- function(input, output) {
output$network <- renderVisNetwork({
visNetwork(nodes_data, edges_data) %>%
visOptions(highlightNearest = TRUE)
})
}
在上述代码中,nodes_data
和edges_data
是包含节点和边数据的数据框。
完整的R Shiny应用程序代码如下:
library(shiny)
library(visNetwork)
# 节点数据
nodes_data <- data.frame(
id = 1:5,
label = c("节点1", "节点2", "节点3", "节点4", "节点5"),
属性 = c("属性1", "属性2", "属性1", "属性3", "属性2")
)
# 边数据
edges_data <- data.frame(
from = c(1, 1, 2, 3, 4),
to = c(2, 3, 4, 5, 5),
label = c("边1", "边2", "边3", "边4", "边5"),
属性 = c("属性1", "属性2", "属性1", "属性3", "属性2")
)
ui <- fluidPage(
checkboxGroupInput("filter", "选择要过滤的属性:",
choices = c("属性1", "属性2", "属性3"),
selected = NULL),
visNetworkOutput("network")
)
server <- function(input, output, session) {
observeEvent(input$filter, {
filtered_nodes <- nodes_data[nodes_data$属性 %in% input$filter, ]
filtered_edges <- edges_data[edges_data$属性 %in% input$filter, ]
updateVisNetwork(
session = session,
"network",
nodes = filtered_nodes,
edges = filtered_edges
)
})
output$network <- renderVisNetwork({
visNetwork(nodes_data, edges_data) %>%
visOptions(highlightNearest = TRUE)
})
}
shinyApp(ui, server)
这样,当用户选择复选框中的属性时,visNetwork图将根据选择的属性进行过滤,只显示符合条件的节点和边。
领取专属 10元无门槛券
手把手带您无忧上云