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
相关产品推荐
相关产品推荐

