如何在animate_process中展示未完成流程的当前状态?
解决processanimateR强制跳转未完成案例到END节点的问题
核心思路
processanimateR默认会给所有案例自动补全到END节点,不管流程是否真的完成。要让未完成案例停留在当前活跃节点,关键是预处理事件日志,移除未完成案例对应的END节点,或者直接不让这些案例生成END事件。
具体步骤与代码示例
1. 识别未完成案例
先从日志里筛选出没有到达最终结束事件(比如你的场景里的closed,或示例里的Check-out)的案例:
library(processanimateR) library(eventdataR) library(dplyr) # 加载示例数据 data(patients) # 找出已完成流程的案例(以Check-out为结束事件) completed_cases <- patients %>% filter(event == "Check-out") %>% pull(case_id) %>% unique() # 未完成案例就是不在completed_cases里的 incomplete_cases <- setdiff(unique(patients$case_id), completed_cases)
2. 预处理日志,移除未完成案例的END节点
processanimateR会自动给每个案例添加END事件,我们需要把未完成案例的END事件删掉:
# 处理日志:保留已完成案例的所有事件,未完成案例只保留到最后一个实际事件 processed_log <- patients %>% group_by(case_id) %>% # 对未完成案例,过滤掉END事件;已完成案例保留所有 filter(!(case_id %in% incomplete_cases & event == "END")) %>% ungroup()
3. 重新生成动画
用处理后的日志调用animate_process,此时未完成案例会停留在它们最后一个实际发生的节点(比如示例里的Triage and Assessment):
animate_process(processed_log, mode = "relative", jitter = 10, legend = "color", mapping = token_aes(color = token_scale("employee",scale = "ordinal", range = RColorBrewer::brewer.pal(7, "Paired"))))
针对你的业务场景调整
把上面代码里的Check-out换成你日志里的结束事件closed,就能适配你的数据:
# 替换成你的结束事件 completed_cases <- your_log %>% filter(event == "closed") %>% pull(case_id) %>% unique() # 后续步骤和上面一致
内容的提问来源于stack exchange,提问作者data_cones_goes
相关产品推荐
相关产品推荐

