You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny中触发plotly_click事件后如何渲染含完整原始数据的详细表格?

R Shiny + Plotly 点击柱状图返回全量原始数据解决方案

核心实现思路

  • 点击plotly柱状图触发的plotly_click事件返回数据中,x字段对应你映射到x轴的Deliv列取值
  • 用该取值作为筛选条件,匹配原始数据框的Deliv列,即可取出对应行的所有字段信息

完整可运行代码

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)) {
        return(datatable(data.frame(提示 = "请点击柱状图查看对应数据")))
      }
      # 用点击返回的x值筛选原始数据的对应行
      target_data <- data[data$Deliv == event.data$x, ]
      datatable(target_data)
    })
    
  }
)

扩展说明

  1. 若需要支持点击多个柱子展示多条数据,可以在plot_ly中配置点击事件的多选规则,同时调整筛选逻辑为data$Deliv %in% sapply(event.data, function(x) x$x)即可
  2. 如果你x轴映射的字段存在重复值,也可以自定义key参数映射到唯一标识列,筛选时用key值匹配更稳妥,示例如下:
# plot_ly部分新增key参数
plot_ly(data,
        x = ~Deliv,
        y = ~Pr,
        type = "bar",
        source = "click",
        key = ~Deliv) # 这里可以替换为你的唯一标识列

# 筛选部分调整为
target_data <- data[data$Deliv == event.data$key, ]

内容的提问来源于stack exchange,提问作者umbra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:54:03