美文网首页
shiny 中使用plotly返回选中和点击事件

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

作者: 上校的猫 | 来源:发表于2021-06-08 09:52 被阅读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)
    
    

    相关文章

      网友评论

          本文标题:shiny 中使用plotly返回选中和点击事件

          本文链接:https://www.haomeiwen.com/subject/hzydeltx.html