R-Plotly:Box Select - 提取 x 和 y 坐标

R-Plotly: Box Select - Extract x & y Coordinates

对于我的项目,我需要提取“Box Select”的 x 和 y 坐标,我将其用于闪亮应用程序中的 select 数据(因为我需要根据这些进行过滤时间范围内的值)。更准确地说 - 我只需要创建框的实际坐标,而不是内部 selected ID 的 x/y 值。

JS - Event Handlers <- 我在这里看到事件处理程序具有这些坐标(x 和 y 数组),您可以在控制台中看到它们 - 但我如何在 R 中动态存储它们?

已经谢谢了。

library(shiny)
library(plotly)

ui <- fluidPage(
   plotlyOutput('myPlot'),
   )

server <- function(input, output, session){
  output$myPlot = renderPlotly({
    plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length, color = ~Species) %>%
      layout(dragmode = "select")
  })
}

shinyApp(ui, server)

您可以使用 event_data 调用提取数据:

library(shiny)
library(plotly)

ui <- fluidPage(
    plotlyOutput('myPlot'),
    verbatimTextOutput("se")
)

server <- function(input, output, session){
    output$myPlot = renderPlotly({
        plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length, color = ~Species) %>%
            layout(dragmode = "select")
    })

    output$se <- renderPrint({
        d <- event_data("plotly_selected")
        d
    })
}

shinyApp(ui, server)

经过大量尝试后,我发现有关框范围的数据并未存储在 "selected" 的 event_data 中,但它们在 "brushed" 和 "brushed" 中都可用"brushing"。

这是我获取创建框范围的解决方案:

library(shiny)
library(plotly)

ui <- fluidPage(
  plotlyOutput('myPlot'),
)

server <- function(input, output, session){

  output$myPlot = renderPlotly({
    plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length, color = ~Species, 
            type = 'scatter') %>%
      layout(dragmode = "select") %>%
      event_register(event = "plotly_brushed")
  })

  # Drag based selection in plotly graph
  selected_range <- reactiveVal({})
  observeEvent(event_data("plotly_brushed"), {
    # storing the values in a reactive value for later use
    selected_range(event_data("plotly_brushed"))

    # alternative method if you want to use it within the same observer/reactive  expression
    #xmin <- event_data("plotly_brushed")$x[1]
    #xmax <- event_data("plotly_brushed")$x[2]
    #ymin <- event_data("plotly_brushed")$y[1]
    #ymax <- event_data("plotly_brushed")$y[2]
  })
}

shinyApp(ui, server)