首页 > 解决方案 > 有没有办法在 plotly_click 之后呈现更详细的表格?

问题描述

我的问题很简单,但我似乎找不到解决方案。

鉴于下面的模拟数据框,我希望在单击使用 plot_ly 生成的条形图中的条形后呈现一个表格。

library(shiny)
library(plotly)
library(DT)

data <- data.frame(c(1,2,3,4,5,6,7,8,9,10), 
                   c(74, 100,74,16,16,99,16, 40, 16, 16), 
                   c(1, 10,1,8,6,2,6,4,6,6), 
                   c(0,0,0,112,0,0,0,0,96,16))
colnames(data) <- c("Deliv", "Pr", "Pro", "Disc")


shinyApp(
  ui = fluidPage(
    plotlyOutput("plot"),
    DT::dataTableOutput('tb')),
  
  server = function(input, output) {
    
    output$plot <- renderPlotly({
      plot_ly(data,
              x = ~Deliv,
              y = ~Pr,
              type = "bar",
              source = "click")})
    
    output$tb <- renderDataTable({
      event.data <- event_data("plotly_click", source = "click")
      
      if(is.null(event.data) == T) return("NULL") else event.data
    })
    
  }
)

渲染的表格可能给了我我应该期待的东西,但我需要更多信息,就像用于绘制的原始数据框中的其他变量一样。

有任何想法吗?我会非常感激。

附言。我知道这适用于 ggplot,但我对 plotly 很感兴趣。

标签: rshinyplotly

解决方案


假设 xou 想要输出关于这一点的过滤数据,我可以提供这个解决方案。event.data给你xy坐标。您可以使用它们来过滤定义xDelivyas的数据点Pr

library(shiny)
library(plotly)
library(DT)

data <- data.frame(c(1,2,3,4,5,6,7,8,9,10), 
                   c(74, 100,74,16,16,99,16, 40, 16, 16), 
                   c(1, 10,1,8,6,2,6,4,6,6), 
                   c(0,0,0,112,0,0,0,0,96,16))
colnames(data) <- c("Deliv", "Pr", "Pro", "Disc")


shinyApp(
  ui = fluidPage(
    plotlyOutput("plot"),
    DT::dataTableOutput('tb')),
  
  server = function(input, output) {
    
    output$plot <- renderPlotly({
      plot_ly(data,
              x = ~Deliv,
              y = ~Pr,
              type = "bar",
              source = "click")})
    
    output$tb <- renderDataTable({
      event.data <- event_data("plotly_click", source = "click")
      ####### SOLUTION HERE
      # corrected NULL as NULL Value
      if(is.null(event.data) == T) return(NULL)
      # Filter result via Data
      res <- data[event.data$x==data$Deliv & event.data$y==data$Pr,]
      return(res)
      ######## SOLUTION END
    })
    
  }
)

推荐阅读