繁体   English   中英

R Shiny - 带有点击事件的桑基图

[英]R Shiny - sankey plot with click events

我正在尝试创建一个带有 Sankey 图的R闪亮仪表板。 我希望能够提取点击节点的名称。

有两个库可以绘制桑基图, networkD3googleVis 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

由于您是 JavaScript 新手,因此我将分享一些有关我如何调试它的详细信息,希望它可以在将来对您有所帮助。

首先,我在 sankey_click 中添加了一个 console.log 语句,以查看我们正在处理的对象类型。 在 Chrome 中,您可以使用Ctrl + Shift + J打开控制台。

  sankey_click <- sprintf("var text = chart.getSelection();
 Shiny.onInputChange('%s', text.toString()); console.log(text);", session$ns('text'))

在此处输入图片说明

所以,现在我们可以明白为什么要返回一个对象了。 事实上,点击是返回一个对象数组,每个对象都有一个属性“名称”。 然后,一旦您知道这一点,就很容易解决。 只需更改 sankey_click

  sankey_click <- sprintf("var text = chart.getSelection()[0]['name'];
 Shiny.onInputChange('%s', text.toString()); console.log(text);", session$ns('text'))

在此处输入图片说明

当你满意时,删除 console.log

  sankey_click <- sprintf("var text = chart.getSelection()[0]['name'];
 Shiny.onInputChange('%s', text.toString());", session$ns('text'))

当您不知道发生了什么时,这只是一种处理 Shiny Javascript 的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM