问题描述
hoverNode
中的 hoverEdge
和 visEvents
参数允许 Shiny 在用户将鼠标悬停在节点或边缘上时更改输入变量,例如input$current_node_id
和 input$current_edge_id
。
然而,对于大型网络,如果鼠标在节点和边缘密集的区域上移动,这可能会很混乱,因为 input$current_node_id
和 input$current_edge_id
快速连续变化多次,导致滞后。
我只想在用户点击节点或边缘时设置 input$current_node_id
和 input$current_edge_id
,而不是悬停。
这是一个使用 hoverNode
和 hoverEdge
的最小工作示例,基于 https://datastorm-open.github.io/visNetwork/shiny.html
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_return1 <- renderPrint({
input$current_node_id
})
output$shiny_return2 <- renderPrint({
input$current_edge_id
})
}
ui <- fluidPage(
visNetworkOutput("network"),verbatimtextoutput("shiny_return1"),verbatimtextoutput("shiny_return2")
)
shinyApp(ui = ui,server = server)
以下是我的尝试。它适用于节点,但不适用于边;也就是说,点击一个节点会更新 current_node_id
,但点击一条边不会更新 current_edge_id
。
library(visNetwork)
library(shiny)
server <- function(input,edges) %>%
visInteraction(hover = TRUE) %>%
visEvents(
click = "function(nodes,edges) {
Shiny.onInputChange('current_node_id',nodes.nodes[0]);
Shiny.onInputChange('current_edge_id',edges.edges[0]);
;}")
})
output$shiny_return1 <- renderPrint({
input$current_node_id
})
output$shiny_return2 <- renderPrint({
input$current_edge_id
})
}
ui <- fluidPage(
visNetworkOutput("network"),server = server)
它也失败了
Shiny.onInputChange('current_edge_id',edges);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)