R - Plotly:获取点击图的id

时间:2017-05-24 20:02:53

标签: r shiny plotly

Plotly具有函数event_data,它将响应绘图点的点击。但是,您必须为event_data指定一个“来源”,用于标识您要观看的地图。

有没有办法回应任何情节的点击并获得给定点击的来源ID?

1 个答案:

答案 0 :(得分:1)

您可以遍历源列表,但是您必须自己跟踪更改,因为只有新的点击才能覆盖以前的点击事件:

shinyApp(ui=fluidPage(plotlyOutput("plot1"),
                      plotlyOutput("plot2")), 
         server=
function(input, output, session) {
  output$plot1 <- renderPlotly(plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length, source="plot1"))
  output$plot2 <- renderPlotly(plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length, source="plot2"))

  states <- reactiveValues(source = c("plot1", "plot2"), value = c(0,0), changed = c(FALSE,FALSE))

  observe({
    for(src in states$source){
      if( !is.null(event_data("plotly_click", source = src) ) ){
        value <- event_data("plotly_click", source = src)[[2]]
        if(states$value[states$source==src]!=value ){
          states$value[states$source==src] <- value
          states$changed[states$source==src] <- TRUE
        }
      }
    }
    if(sum(states$changed)>0)
      print(paste(states$source[states$changed], 'has changed'))
    states$changed <- c(FALSE,FALSE)
  })
})