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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 20:35:31