当前位置:  开发笔记 > 编程语言 > 正文

R Shiny - 带有点击事件的sankey情节

如何解决《RShiny-带有点击事件的sankey情节》经验,为你挑选了1个好方法。

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

有2个库可以绘制Sankey图表,networkD3googleVis.networkD3允许您监视单击事件,即使在同一个库中实现的其他类型的绘图带有此类功能(forceNetwork()).

googleVis但是gvisSankey,package有一个可以创建sankey图的函数,作为一个选项,你可以传递一个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.

提前谢谢了!



1> danielson..:

我将分享一些有关我如何调试此问题的详细信息,因为您不熟悉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'))

在此输入图像描述

所以,现在我们可以看到你为什么要返回一个对象.事实上,点击是返回一个对象数组,每个对象都有一个属性"name".然后,一旦你知道这一点,这是一个简单的解决方案.只需更改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的方法.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有