shiny 中使用plotly返回选中和点击事件

方法一 主要使用的是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)

你可能感兴趣的:(shiny 中使用plotly返回选中和点击事件)