2017-07-20 29 views
0

我很难在Shiny中使用networkd3包。 我绘制了一张图并希望以反应方式将节点信息提取回闪亮,以便可视化有关某个节点的更多信息。 E.g中心节点“Father”和其他“Son1”...“SonN”的星形图。点击Son节点后,我希望能够以闪亮的方式访问“Son1”名字,从闪亮的数据框中提取信息并可视化其他信息(例如作业,年龄等)。 我能够使用clickAction到例如在屏幕上显示一个消息:将节点信息从networkd3提取到闪亮的反应变量中

forceNetwork(....., clickAction= 'alert(d.name)') 

,但我不知道如何得到这个d.name值回闪亮,这样我就可以进一步使用它,我在开始运行时不会出现错误,因为d.name在开始时不存在(可能在这里观察函数?)我基本上需要一个等价的DT包input$table_rows_selected

回答

0

这里是一个非常粗糙,但工作,一个networkD3forceNetwork图(使用clickAction = 'Shiny.onInputChange("id", d.name)')上点击返回一个值,然后将其用于显示与该名称的数据帧的例子。

library(shiny) 
library(networkD3) 

links <- read.table(header = T, text = ' 
source target value 
0 1 1 
0 2 1 
') 

nodes <- read.table(header = T, text = ' 
name group 
dad 1 
son1 1 
son2 1 
') 

son1 <- read.table(text = ' 
name John 
age 18 
') 

son2 <- read.table(text = ' 
name Mark 
age 14 
') 

ui <- shinyUI(fluidPage(
    fluidRow(
     column(4, forceNetworkOutput("force")), 
     column(4, DT::dataTableOutput("table")) 
    ) 
)) 

server <- shinyServer(function(input, output) { 

    output$force <- renderForceNetwork({ 
    forceNetwork(Links = links, Nodes = nodes, Source = "source", 
       Target = "target", Value = "value", NodeID = "name", 
       Group = "group", opacity = 1, opacityNoHover = 1, 
       clickAction = 'Shiny.onInputChange("id", d.name)') 
    }) 

    output$table <- DT::renderDataTable(DT::datatable(get(input$id))) 

}) 

shinyApp(ui = ui, server = server) 
+0

完美的作品,非常感谢! 任何机会,你可以带领我的文档或一些资源有关clickAction函数兼容闪亮?我想探索更多的可能性。再次感谢! –

+0

我是networkD3的维护者之一,但并不是很多Shiny用户,所以我没有给你一个很好的建议。但是,考虑到Shiny.onInputChange()函数只是将一个值赋给一个可以在R中访问的对象,所以大部分的可能性可能都是您已经熟悉的。 –