VisNetwork with Shiny 的点击事件
Click events for VisNetwork with Shiny
我已经使用 Shiny 中的 visNetwork 包构建了我的网络。我想单击一个节点,然后从数据框中显示有关该节点的信息。我已经能够使用 click 和 nearpoint 函数对散点图执行此操作,例如此处显示的 Shiny 示例中的散点图:http://shiny.rstudio.com/gallery/plot-interaction-selecting-points.html.
对于我的网络,我尝试过:
server <- function(input, output) {
output$network <- renderVisNetwork({
visNetwork(my.nodes, my.edges,
height = "100%", width = "100%",
main = "") %>%
visEvents(hoverNode = "function(nodes){
Shiny.onInputChange('current_node_id',nodes);
;}",
click = "function(){
Shiny.onInputChange('click',{node: current_node_id});
;}"
)
})
output$shiny_return <- renderPrint({
if(!is.null(input$current_node_id)){
nearPoints(node.data,click$node, addDist = TRUE )
}
})
ui <- fluidPage(
visNetworkOutput("network"),
verbatimTextOutput("shiny_return")
)
但是,我收到一条错误消息 "click object not found"
感谢您的帮助。
不同点:
- 你的 javascript 事件
click
是错误的。不知道 current_node_id
并且必须使用 input$click
而不是 click$node
nearPoints
仅适用于 plotOuput。不能与 javascript / htmlwidgets 函数一起使用。
为了用visNetwork
启用这种功能,我刚刚在最新的开发版本中添加了一个新功能visNearestNodes
。这是一个简单的例子:
# install dev version
devtools::install_github("datastorm-open/visNetwork")
require(visNetwork)
require(shiny)
nodes <- data.frame(id = 1:15, label = paste("Label", 1:15),
group = sample(LETTERS[1:3], 15, replace = TRUE))
edges <- data.frame(from = trunc(runif(15)*(15-1))+1,
to = trunc(runif(15)*(15-1))+1)
server <- function(input, output, session) {
output$network <- renderVisNetwork({
visNetwork(nodes, edges,
height = "100%", width = "100%",
main = "") %>%
visEvents(click = "function(nodes){
Shiny.onInputChange('click', nodes.nodes[0]);
;}"
)
})
output$shiny_return <- renderPrint({
visNetworkProxy("network") %>%
visNearestNodes(target = input$click)
})
}
ui <- fluidPage(
visNetworkOutput("network"),
verbatimTextOutput("shiny_return")
)
shiny::shinyApp(ui = ui, server = server)
我已经使用 Shiny 中的 visNetwork 包构建了我的网络。我想单击一个节点,然后从数据框中显示有关该节点的信息。我已经能够使用 click 和 nearpoint 函数对散点图执行此操作,例如此处显示的 Shiny 示例中的散点图:http://shiny.rstudio.com/gallery/plot-interaction-selecting-points.html.
对于我的网络,我尝试过:
server <- function(input, output) {
output$network <- renderVisNetwork({
visNetwork(my.nodes, my.edges,
height = "100%", width = "100%",
main = "") %>%
visEvents(hoverNode = "function(nodes){
Shiny.onInputChange('current_node_id',nodes);
;}",
click = "function(){
Shiny.onInputChange('click',{node: current_node_id});
;}"
)
})
output$shiny_return <- renderPrint({
if(!is.null(input$current_node_id)){
nearPoints(node.data,click$node, addDist = TRUE )
}
})
ui <- fluidPage(
visNetworkOutput("network"),
verbatimTextOutput("shiny_return")
)
但是,我收到一条错误消息 "click object not found"
感谢您的帮助。
不同点:
- 你的 javascript 事件
click
是错误的。不知道current_node_id
并且必须使用input$click
而不是click$node
nearPoints
仅适用于 plotOuput。不能与 javascript / htmlwidgets 函数一起使用。
为了用visNetwork
启用这种功能,我刚刚在最新的开发版本中添加了一个新功能visNearestNodes
。这是一个简单的例子:
# install dev version
devtools::install_github("datastorm-open/visNetwork")
require(visNetwork)
require(shiny)
nodes <- data.frame(id = 1:15, label = paste("Label", 1:15),
group = sample(LETTERS[1:3], 15, replace = TRUE))
edges <- data.frame(from = trunc(runif(15)*(15-1))+1,
to = trunc(runif(15)*(15-1))+1)
server <- function(input, output, session) {
output$network <- renderVisNetwork({
visNetwork(nodes, edges,
height = "100%", width = "100%",
main = "") %>%
visEvents(click = "function(nodes){
Shiny.onInputChange('click', nodes.nodes[0]);
;}"
)
})
output$shiny_return <- renderPrint({
visNetworkProxy("network") %>%
visNearestNodes(target = input$click)
})
}
ui <- fluidPage(
visNetworkOutput("network"),
verbatimTextOutput("shiny_return")
)
shiny::shinyApp(ui = ui, server = server)