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)
对于我的项目,我需要提取“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)