从 networkd3 中提取节点信息到闪亮的反应变量
Extracting node information from networkd3 to a reactive variable in shiny
我很难在 Shiny 中使用 networkd3 包。
我已经绘制了一个图表,并希望以反应方式将节点信息提取回 shiny 以可视化有关某个节点的更多信息。
例如,中心节点 "Father" 和其他节点 "Son1"..."SonN" 的星图。单击 Son 节点后,我希望能够访问 shiny 中的 "Son1" 名称,以从 shiny 中的数据框中提取信息并可视化其他信息(例如工作、年龄等)。
例如,我能够使用 clickAction 在屏幕上显示消息:
forceNetwork(....., clickAction= 'alert(d.name)')
但我不知道如何将这个 d.name 值恢复为 shiny,所以我可以进一步使用它并且在开始 运行 shiny 时我不会收到错误,因为d.name 从一开始就不存在(也许在这里观察功能?)我基本上需要一个等效的 DT 包 input$table_rows_selected
。
这是一个非常粗糙但有效的示例,其中 networkD3
forceNetwork
图在单击时返回一个值(使用 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)
我很难在 Shiny 中使用 networkd3 包。 我已经绘制了一个图表,并希望以反应方式将节点信息提取回 shiny 以可视化有关某个节点的更多信息。 例如,中心节点 "Father" 和其他节点 "Son1"..."SonN" 的星图。单击 Son 节点后,我希望能够访问 shiny 中的 "Son1" 名称,以从 shiny 中的数据框中提取信息并可视化其他信息(例如工作、年龄等)。 例如,我能够使用 clickAction 在屏幕上显示消息:
forceNetwork(....., clickAction= 'alert(d.name)')
但我不知道如何将这个 d.name 值恢复为 shiny,所以我可以进一步使用它并且在开始 运行 shiny 时我不会收到错误,因为d.name 从一开始就不存在(也许在这里观察功能?)我基本上需要一个等效的 DT 包 input$table_rows_selected
。
这是一个非常粗糙但有效的示例,其中 networkD3
forceNetwork
图在单击时返回一个值(使用 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)