2017-07-20 26 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中訪問的對象,所以大部分的可能性可能都是您已經熟悉的。 –