如何在processmapR中自定义流程地图的Edge(边)路径?
自定义processmapR流程地图的边路径
你已经用以下代码实现了流程节点的自定义位置:
library(processmapR) library(lgr) library(eventdataR) library(dplyr) library(rpart) library(readxl) library(bupaR) library(processanimateR) library(reshape2) library(yaml) library(ggplot2) library(openxlsx) library(DiagrammeR) library(pmap) positions <- data.frame(act = c("ARTIFICIAL_START", "Registration", "Triage and Assessment", "X-Ray", "Blood test", "MRI SCAN", "Discuss Results", "Check-out", "ARTIFICIAL_END"), x = c(1,3,4,4,8,6,4,8,9), y = c(9,9,8,6,5,4,3,2,1), stringsAsFactors = F ) # 先不渲染,方便后续修改边属性 graph <- process_map(patients, layout = layout_pm(positions), render = FALSE)
要给边指定自定义路径(强制经过特定点),得靠DiagrammeR的属性设置——因为processmapR生成的是Graphviz格式的图,支持用pos属性定义边的路径控制点。
具体操作步骤:
- 第一步:定位需要调整的边
先查看当前图的所有边信息,找到要修改路径的边的起点和终点:
# 输出所有边的起点、终点详情 graph$edges
- 第二步:为目标边设置路径控制点
使用edge_attr_set()函数,给指定边添加pos属性,属性值是空格分隔的坐标序列(格式:起点坐标 控制点1 控制点2 ... 终点坐标),强制边按设定路径绘制。
举个例子,如果你想让X-Ray到Discuss Results的边向右绕开中间节点,可这么设置:
# 找到目标边的ID target_edge_id <- which(graph$edges$from == "X-Ray" & graph$edges$to == "Discuss Results") # 设置路径:从X-Ray的坐标(4,6)出发,经过(5,6)、(5,3),最终到Discuss Results的坐标(4,3) graph <- graph %>% edge_attr_set( attr = "pos", value = "4,6 5,6 5,3 4,3", edge_id = target_edge_id )
- 第三步:渲染查看调整后的效果
render_graph(graph)
注意事项:
- 坐标要和你自定义的节点位置(
positions数据框)保持一致,控制点需选在能避开其他节点的位置。 - 多条边需要调整时,重复上述步骤给每条边设置对应的
pos属性即可。 - 如果路径效果不符合预期,直接调整控制点的坐标重新测试即可。
内容的提问来源于stack exchange,提问作者Schlea
相关产品推荐
相关产品推荐

