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

Shiny应用中基于selectInput筛选process_map的流转边

解决方案:通过选中流转对筛选流程地图的边

要实现通过selectInput勾选/取消勾选流转对来显示/隐藏流程地图的边,核心思路是解析选中的流转对,过滤流程地图的边集合后重新渲染,具体步骤及代码如下:

1. 核心逻辑说明

  • 先解析selectInput中选中的流转字符串,拆分为前置/后置节点的对应关系
  • 生成完整的流程地图对象后,提取其内置的边集合,保留匹配选中流转对的边
  • 将过滤后的边替换回原地图对象,重新渲染为可缩放的SVG

2. 修改后的完整代码

library(shiny)
library(bupaR)
library(svgPanZoom)
library(DiagrammeR)
library(DiagrammeRsvg)
library(processmapR)
library(dplyr)

# 预提取所有流转关系,用于生成selectInput选项
edges <- patients %>%
  process_map(performance(mean, "days")) %>%
  attr("edges") %>%
  rename(predecessor = from, successor = to)

ui <- fluidPage(
  selectInput("tran", 
              "transitions", 
              choices = paste(edges$predecessor, "-", edges$successor),
              selected = paste(edges$predecessor, "-", edges$successor),
              multiple = TRUE),
  svgPanZoomOutput("pmap", height = 500, width = 1600)
)

server <- function(input, output) {
  
  # 响应式解析选中的流转对
  selected_trans <- reactive({
    req(input$tran)
    t(sapply(input$tran, function(x) strsplit(x, " - ")[[1]])) %>%
      as.data.frame(stringsAsFactors = FALSE) %>%
      setNames(c("predecessor", "successor"))
  })
  
  output$pmap <- renderSvgPanZoom({
    # 生成完整的流程地图对象
    full_process_map <- process_map(patients, 
                                   type_nodes = frequency("absolute", color_scale = "Greys"),
                                   type_edges = frequency("absolute", color_edges = "Greys"),
                                   rankdir = "LR", 
                                   render = FALSE)
    
    # 过滤边:未选中任何流转则保留全部,否则只保留选中的流转
    filtered_edges <- if (length(input$tran) == 0) {
      attr(full_process_map, "edges")
    } else {
      attr(full_process_map, "edges") %>%
        inner_join(selected_trans(), by = c("from" = "predecessor", "to" = "successor"))
    }
    
    # 替换过滤后的边到地图对象
    attr(full_process_map, "edges") <- filtered_edges
    
    # 渲染为可缩放SVG
    full_process_map %>% 
      generate_dot() %>% 
      grViz(width = 1000, height = 2000) %>% 
      export_svg() %>% 
      svgPanZoom(height = 800, controlIconsEnabled = TRUE)
  })
  
}

shinyApp(ui = ui, server = server)

3. 关键细节

  • 流转对解析:通过strsplit拆分选中的字符串,转换为标准化的节点对应数据集,确保能和流程地图的边集合精准匹配
  • 容错处理:添加了空选中的判断,若未勾选任何流转对则默认显示全部边,避免出现空白地图
  • 高效修改:直接修改process_map返回对象的edges属性,无需重新从事件日志生成地图,提升渲染效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:25:22