簡體   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