如何让Graphviz将距根节点最大路径长度相同的节点渲染在同一层
Graphviz 实现按根节点最大路径长度分层的方法
这个效果完全可以通过 Graphviz 的 dot 布局实现,核心是用rank属性强制把最大路径长度相同的节点放在同一层级,解决默认dot布局按最短路径分层的问题。
具体操作步骤如下:
- 先计算每个节点到根节点的最长路径长度,数值相同的节点归为同一层
以你给出的示例为例:Root 到自身的最长路径长度为0,归为第0层
C1、C2 到 Root 的最长路径长度都是1,归为第1层
C3、C4、C5 到 Root 的最长路径长度都是2,归为第2层 - 在 dot 脚本中使用
{ rank=same; 节点名1; 节点名2; }语法,把同层节点放在同一个 rank 分组里
你可以直接用下面的示例代码测试效果:
digraph build_pipeline { rankdir=TB; // 设定从上到下的布局方向,和你给出的示例一致 node [shape=plaintext]; // 可选,去掉节点边框更接近你给的文本示例效果 // 定义依赖关系 Root -> C1 Root -> C2 C1 -> C3 C2 -> C4 C2 -> C5 // 按最长路径长度设置同层节点 { rank=same; Root } { rank=same; C1; C2 } { rank=same; C3; C4; C5 } }
- 渲染生成图片的命令示例:
dot -Tpng your_file_name.dot -o build_pipeline.png
如果你的依赖图节点数量多,手动计算最长路径比较麻烦,可以写个简单的遍历脚本自动计算每个节点的最长路径值,再批量生成对应的 rank 规则即可,不用手动配置。
内容的提问来源于stack exchange,提问作者Att Righ
相关产品推荐
相关产品推荐

