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

Shiny应用需求:点击活动频率柱状图子集化bupaR流程地图

实现Shiny应用中柱状图点击联动流程地图子集化

完全可以实现点击柱状图柱子后,动态筛选流程地图仅显示相关节点及连接。核心是利用Plotly的点击事件捕获选中的trace,再基于该trace子集化事件日志,重新生成流程地图。

以下是修改后的完整代码:

library(shiny)
library(shinydashboard)
library(bupaR)
library(processmapR)
library(eventdataR)
library(DiagrammeR)
library(svgPanZoom)
library(DiagrammeRsvg)
library(plotly)

ui <- dashboardPage(
  dashboardHeader(title = "decio"),
  dashboardSidebar(collapsed = TRUE),
  dashboardBody(
    plotlyOutput("activity_frequency"),
    svgPanZoomOutput("pmap")
  )
)

server <- function(input, output, session) {
  # 初始化事件日志
  sip <- bupaR::simple_eventlog(
    eventlog = eventdataR::sepsis,
    case_id = "case_id",
    activity_id = "activity",
    timestamp = "timestamp",
    resource_id = "resource"
  )
  
  # 存储选中的trace,初始为NULL(显示全部)
  selected_trace <- reactiveVal(NULL)
  
  # 渲染活动频率柱状图,启用点击事件
  output$activity_frequency <- renderPlotly({
    p <- sip %>% 
      activity_frequency("trace") %>% 
      plot()
    
    ggplotly(p) %>%
      # 开启点击事件,返回选中的点数据
      event_register("plotly_click")
  })
  
  # 监听柱状图点击事件,更新选中的trace
  observeEvent(input$activity_frequency_click, {
    click_data <- input$activity_frequency_click
    # 获取点击柱子对应的trace名称
    selected_trace(click_data$x)
  })
  
  # 生成子集化后的事件日志
  filtered_sip <- reactive({
    if (is.null(selected_trace())) {
      sip # 未选中时返回全部数据
    } else {
      # 根据选中的trace筛选案例
      trace_cases <- sip %>% 
        trace_list() %>% 
        filter(trace == selected_trace()) %>% 
        pull(case_id)
      
      sip %>% filter(case_id %in% trace_cases)
    }
  })
  
  # 渲染动态更新的流程地图
  output$pmap <- renderSvgPanZoom({
    process_map(filtered_sip(), 
                type_nodes = frequency("relative_case", color_scale = "Purples"),
                type_edges = performance(mean, "days", color_edges = "Purples"),
                rankdir = "TB", render = FALSE) %>% 
      generate_dot() %>% 
      grViz(width = 800, height = 1600) %>% 
      export_svg() %>% 
      svgPanZoom(height = 800, controlIconsEnabled = TRUE)
  })
}

shinyApp(ui, server)

关键改动说明:

  • 点击事件监听:给Plotly图表注册plotly_click事件,通过input$activity_frequency_click捕获点击数据,提取选中的trace名称。
  • 响应式数据存储:用reactiveVal保存选中的trace,实现状态跟踪。
  • 动态数据筛选:创建filtered_sip响应式对象,根据选中的trace筛选对应的案例,生成子集化的事件日志。
  • 流程地图动态渲染:将原流程地图的数据源替换为filtered_sip(),实现点击后自动更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:16:01