在 Shiny App 的另一部分从 ggplotly 中检索选定的点
Retrieve Selected Points from ggplotly in Another Part of Shiny App
期望的结果
我希望能够在我的 {shiny} 应用程序中单击 plotly::ggplotly()
图表中的一个点,然后在下面的单独输出中显示有关该点的一些信息。
MRE
在这个简单的示例中,我可以让它显示 curveNumber
、pointNumber
、x
、y
,但明确检索特定数据点并不容易来自这些值的原始数据。我已经 read 关于在 plotly::renderPlotly()
调用中使用 key
,尽管我不确定如何在应用程序的单独部分访问它。
library(tidyverse)
library(plotly)
library(shiny)
# UI ----
ui <- fluidPage(plotlyOutput("plot"),
verbatimTextOutput("click"))
# server ----
server <- function(input, output) {
output$plot <- renderPlotly({
p <- mtcars %>%
rownames_to_column("car") %>%
ggplot(aes(x = disp, y = mpg, color = factor(cyl),
label = car)) +
geom_point(size = 4, alpha = 0.7)
ggplotly(p) %>%
event_register("plotly_click")
})
output$click <- renderPrint({
point <- event_data(event = "plotly_click", priority = "event")
if (is.null(point)) "No Point Selected" else point
})
}
# app ----
shinyApp(ui = ui, server = server)
使用 here 中的代码,我想出了如何使用 key
来识别点,然后从 event_data()
的其他地方检索它。
library(tidyverse)
library(plotly)
library(shiny)
d <- mtcars %>%
rownames_to_column("car")
# UI ----
ui <- fluidPage(plotlyOutput("plot"),
tableOutput("click"))
# server ----
server <- function(input, output) {
output$plot <- renderPlotly({
key <- d$car
p <- d %>%
ggplot(aes(x = disp, y = mpg, color = factor(cyl),
key = key)) +
geom_point(size = 4, alpha = 0.7)
ggplotly(p) %>%
event_register("plotly_click")
})
output$click <- renderTable({
point <- event_data(event = "plotly_click", priority = "event")
req(point) # to avoid error if no point is clicked
filter(d, car == point$key) # use the key to find selected point
})
}
# app ----
shinyApp(ui = ui, server = server)
期望的结果
我希望能够在我的 {shiny} 应用程序中单击 plotly::ggplotly()
图表中的一个点,然后在下面的单独输出中显示有关该点的一些信息。
MRE
在这个简单的示例中,我可以让它显示 curveNumber
、pointNumber
、x
、y
,但明确检索特定数据点并不容易来自这些值的原始数据。我已经 read 关于在 plotly::renderPlotly()
调用中使用 key
,尽管我不确定如何在应用程序的单独部分访问它。
library(tidyverse)
library(plotly)
library(shiny)
# UI ----
ui <- fluidPage(plotlyOutput("plot"),
verbatimTextOutput("click"))
# server ----
server <- function(input, output) {
output$plot <- renderPlotly({
p <- mtcars %>%
rownames_to_column("car") %>%
ggplot(aes(x = disp, y = mpg, color = factor(cyl),
label = car)) +
geom_point(size = 4, alpha = 0.7)
ggplotly(p) %>%
event_register("plotly_click")
})
output$click <- renderPrint({
point <- event_data(event = "plotly_click", priority = "event")
if (is.null(point)) "No Point Selected" else point
})
}
# app ----
shinyApp(ui = ui, server = server)
使用 here 中的代码,我想出了如何使用 key
来识别点,然后从 event_data()
的其他地方检索它。
library(tidyverse)
library(plotly)
library(shiny)
d <- mtcars %>%
rownames_to_column("car")
# UI ----
ui <- fluidPage(plotlyOutput("plot"),
tableOutput("click"))
# server ----
server <- function(input, output) {
output$plot <- renderPlotly({
key <- d$car
p <- d %>%
ggplot(aes(x = disp, y = mpg, color = factor(cyl),
key = key)) +
geom_point(size = 4, alpha = 0.7)
ggplotly(p) %>%
event_register("plotly_click")
})
output$click <- renderTable({
point <- event_data(event = "plotly_click", priority = "event")
req(point) # to avoid error if no point is clicked
filter(d, car == point$key) # use the key to find selected point
})
}
# app ----
shinyApp(ui = ui, server = server)