有没有一种方法可以将 DOT/Graphviz 中的边分组到单个总线中,同时仍然使节点附近的边磨损?
例如:
改变这个:
graph my_graph {
rankdir=LR
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- C;
}
变成这样的东西:
最佳答案
一种方法是使用虚拟 [shape=point]
节点,如下所示:
graph my_graph {
rankdir=LR;
{rank = same; B; C;}
aa [ shape=point ];
bb [ shape=point ];
A -- aa;
A -- aa;
A -- aa;
A -- aa;
A -- aa;
A -- aa;
A -- aa;
A -- aa;
A -- aa;
aa -- bb [ penwidth=4.0];
bb -- B;
bb -- B;
bb -- B;
bb -- B;
bb -- B;
bb -- B;
bb -- B;
bb -- B;
bb -- B;
A -- C;
}
但这有一些缺点:
- 它会使源文件中的边数加倍,并使其难以管理。
- 如果您有头标签和尾标签,则需要相应地放置它们。
- 它会打乱您的节点排名,因此您必须手动调整所有其他节点。
- 磨损的末端仍然是圆形的,占据了很大的空间。这可以通过设置 splines 来修复。属性,但我无法让它工作(似乎两个节点之间没有多条边总是显示为样条线,无论
splines
的值是什么)。
另一个选项:
还有concentrate属性,但这将仅收集前往同一点的线。它不会 1) 磨损末端或 2) 增加线条粗细来表示总线:
graph my_graph {
rankdir=LR
concentrate=true;
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- B;
A -- C;
}
关于graphviz - 对 DOT 中的边进行分组 (Graphviz),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47719267/