2017-01-14 6 views
3

나는 Sankey 음모가있는 R 반짝이 대시 보드를 만들려고합니다. 내가 클릭 한 노드의 이름을 추출 할 수 있기를 원합니다.R 클릭 이벤트가있는 반짝이는 음모

Sankey 다이어그램을 플롯 할 수있는 라이브러리가 networkD3googleVis입니다. networkD3 같은 라이브러리에 구현 된 다른 유형의 플롯이 이러한 기능 (forceNetwork())과 함께 제공 되더라도 클릭 이벤트를 모니터링 할 수 있습니다.

googleVis 패키지에는 sankey 플롯을 만들 수있는 함수 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입니다 : 이것은 내가 얻을 수 있었다 얼마나 멀리이다.

미리 감사드립니다.

답변

3

JavaScript를 처음 사용하기 때문에 디버깅 방법에 대한 몇 가지 세부 정보를 공유하겠습니다. 향후 도움이 될 수 있습니다.

먼저 sankey_click에 console.log 문을 추가하여 어떤 종류의 객체를 처리했는지 확인했습니다. Chrome에서는 Ctrl + Shift + 으로 콘솔을 열 수 있습니다. 객체를 반환하는 이유

enter image description here

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')) 

enter image description here

을 변경하고 당신이 만족 할 때 CONSOLE.LOG에게 당신이 모르는 경우 반짝 자바 스크립트 처리하는

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

그냥 하나의 방법을 제거 할 것 진행되고있다.

+0

만약 내가 할 수 있으면이 답변을 100 upvotes 줄 줄, 감사합니다! 당신은 나에게 답을주지 않았고, 미래에 비슷한 문제를 해결하는 방법을 보여 주셨습니다. – IVR