Я пытаюсь создать R блестящую информационную панель с графиком Санки. Я хочу иметь возможность извлечь имя щелкнутого узла.
Есть две библиотеки, которые могут строить диаграммы Санки, networkD3
и googleVis
. networkD3
позволяет отслеживать события кликов, хотя другой тип графика, реализованный в той же библиотеке, имеет такую функцию (forceNetwork()
).
Однако в пакете googleVis
есть функция gvisSankey
, которая может создавать графики Санки, и в качестве опции вы можете передать параметр gvis.listener.jscode
, который должен иметь возможность захватить его.
Боюсь, я не очень хорошо знаком с JS и изо всех сил пытаюсь получить то, что ищу. Вот как далеко мне удалось зайти:
library(shiny)
library(googleVis)
datSK <- data.frame(From=c(rep("A",3), rep("B", 3)),
To=c(rep(c("X", "Y", "Z"),2)),
Weight=c(5,7,6,2,9,4))
SERVER <- function(input, output, session){
sankey_click <- sprintf("var text = chart.getSelection();
Shiny.onInputChange('%s', text.toString())", session$ns('text'))
output$sankey <- renderGvis(
gvisSankey(datSK, from="From", to="To", weight="Weight",
options=list(gvis.listener.jscode = sankey_click,
sankey = "{node: {interactivity: true, width: 50}}"))
)
click_event <- reactive({input$text})
output$click <- renderText(click_event())
}
UI <- fluidPage(
fluidRow(column(12, htmlOutput("sankey"))),
fluidRow(column(12, verbatimTextOutput("click")))
)
shinyApp(ui = UI, server = SERVER)
Как видите, все, что я получаю, это object Object
.