shiny 中使用plotly返回选中和点击事件
2021-06-08 本文已影响0人
上校的猫
方法一 主要使用的是event_data 函数获取点击、选取对象的data。
library(plotly)
library(shiny)
mtcars$key <- row.names(mtcars)
mtcars$col <- "black"
ui <- fluidPage(
plotlyOutput("plot")
)
server <- function(input, output, session) {
output$plot <- renderPlotly({
click_data <- event_data("plotly_click")
select_data <- event_data("plotly_selected")
if (!is.null(select_data)) {
mtcars[mtcars$key %in% select_data$key, "col"] <- "blue"
}
if (!is.null(click_data)) {
mtcars[mtcars$key %in% click_data$key, "col"] <- "red"
}
p <- ggplot(mtcars, aes(mpg, wt, col = I(col), key = key)) +
geom_point()
ggplotly(p) %>% layout(dragmode = "lasso")
})
}
shinyApp(ui, server)
另一种方式是使用 引入crosstalk包,这种方法简单粗暴,同时实现双向选择。点击图,返回选择的datatable;点击datatable高亮图。
library(plotly)
library(crosstalk)
library(DT)
library(shiny)
ui <- fluidPage(
plotlyOutput("plot"),
DTOutput("data")
)
server <- function(input, output, session) {
sd <- reactive({
SharedData$new(iris)
})
output$plot <- renderPlotly({
plot_ly(sd(), x = ~Sepal.Width, y = ~Petal.Width) %>%
add_markers(alpha = 0.5) %>%
highlight("plotly_selected", dynamic = TRUE)
})
output$data <- renderDT({
sd()},
server = FALSE
)
}
shinyApp(ui, server)