[英]R Shiny - sankey plot with click events
我正在嘗試創建一個帶有 Sankey 圖的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
。
由於您是 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.