如何同时显示来自 visNetwork 的节点和边的闪亮输入而不是单独显示
How to show Shiny input of nodes and edges from visNetwork together instead of separate
我正在使用 visNetwork 包在 Shiny 中构建网络。
显示节点和边输入的功能很有趣。但是,节点和边输入只能单独显示,不能一起显示在 1 个框中。
我按照以下说明 https://datastorm-open.github.io/visNetwork/shiny.html 通过将鼠标悬停在节点和边上来构建交互式节点和边输入。
这是通过在 visNetwork 包中的 visEvent 函数中使用 hoverNode/hoverEdge arg 来完成的。
这基于 javascript 事件
中的 Shiny.OnInputChange 函数
library(visNetwork)
library(shiny)
server <- function(input, output) {
output$network <- renderVisNetwork({
# minimal example
nodes <- data.frame(id = 1:3, label = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
visNetwork(nodes, edges) %>%
visInteraction(hover = TRUE) %>%
visEvents(hoverNode = "function(nodes) {
Shiny.onInputChange('current_node_id', nodes);
;}"), hoverEdge = "function(edges) {
Shiny.onInputChange('current_edge_id', edges);
;}")
})
output$shiny_return <- renderPrint({
input$current_node_id
})
}
output$shiny_return <- renderPrint({
input$current_edge_id
})
}
ui <- fluidPage(
visNetworkOutput("network"),
verbatimTextOutput("shiny_return")
)
shinyApp(ui = ui, server = server)
根据代码,我有 2 个 renderPrint 输出。我想保留 1,但是,它受到 hoverNode/hoverEdge 个参数的限制。
提前致谢
Shiny.onInputChange
允许我们为输出指定任何名称。由于在任何给定时间您都可以将鼠标悬停在节点或边缘上,因此您可以简单地在 JS 代码中为节点和边缘赋予相同的名称,并在 Shiny 服务器端代码中引用此输入。这就是它的样子:
library(visNetwork)
library(shiny)
server <- function(input, output) {
output$network <- renderVisNetwork({
# minimal example
nodes <- data.frame(id = 1:3, label = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
visNetwork(nodes, edges) %>%
visInteraction(hover = TRUE) %>%
visEvents(hoverNode = "function(nodes) {
Shiny.onInputChange('unique_id', nodes);
;}", hoverEdge = "function(edges) {
Shiny.onInputChange('unique_id', edges);
;}")
})
output$shiny_return <- renderPrint({
input$unique_id
})
}
ui <- fluidPage(
visNetworkOutput("network"),
verbatimTextOutput("shiny_return")
)
shinyApp(ui = ui, server = server)
我正在使用 visNetwork 包在 Shiny 中构建网络。
显示节点和边输入的功能很有趣。但是,节点和边输入只能单独显示,不能一起显示在 1 个框中。
我按照以下说明 https://datastorm-open.github.io/visNetwork/shiny.html 通过将鼠标悬停在节点和边上来构建交互式节点和边输入。 这是通过在 visNetwork 包中的 visEvent 函数中使用 hoverNode/hoverEdge arg 来完成的。 这基于 javascript 事件
中的 Shiny.OnInputChange 函数library(visNetwork)
library(shiny)
server <- function(input, output) {
output$network <- renderVisNetwork({
# minimal example
nodes <- data.frame(id = 1:3, label = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
visNetwork(nodes, edges) %>%
visInteraction(hover = TRUE) %>%
visEvents(hoverNode = "function(nodes) {
Shiny.onInputChange('current_node_id', nodes);
;}"), hoverEdge = "function(edges) {
Shiny.onInputChange('current_edge_id', edges);
;}")
})
output$shiny_return <- renderPrint({
input$current_node_id
})
}
output$shiny_return <- renderPrint({
input$current_edge_id
})
}
ui <- fluidPage(
visNetworkOutput("network"),
verbatimTextOutput("shiny_return")
)
shinyApp(ui = ui, server = server)
根据代码,我有 2 个 renderPrint 输出。我想保留 1,但是,它受到 hoverNode/hoverEdge 个参数的限制。
提前致谢
Shiny.onInputChange
允许我们为输出指定任何名称。由于在任何给定时间您都可以将鼠标悬停在节点或边缘上,因此您可以简单地在 JS 代码中为节点和边缘赋予相同的名称,并在 Shiny 服务器端代码中引用此输入。这就是它的样子:
library(visNetwork)
library(shiny)
server <- function(input, output) {
output$network <- renderVisNetwork({
# minimal example
nodes <- data.frame(id = 1:3, label = 1:3)
edges <- data.frame(from = c(1,2), to = c(1,3))
visNetwork(nodes, edges) %>%
visInteraction(hover = TRUE) %>%
visEvents(hoverNode = "function(nodes) {
Shiny.onInputChange('unique_id', nodes);
;}", hoverEdge = "function(edges) {
Shiny.onInputChange('unique_id', edges);
;}")
})
output$shiny_return <- renderPrint({
input$unique_id
})
}
ui <- fluidPage(
visNetworkOutput("network"),
verbatimTextOutput("shiny_return")
)
shinyApp(ui = ui, server = server)