graphviz - 对 DOT 中的边进行分组 (Graphviz)

标签 graphviz dot

有没有一种方法可以将 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;
}

enter image description here

变成这样的东西:

example bus

最佳答案

一种方法是使用虚拟 [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;
}

with dummy point nodes

但这有一些缺点:

  1. 它会使源文件中的边数加倍,并使其难以管理。
  2. 如果您有头标签和尾标签,则需要相应地放置它们。
  3. 它会打乱您的节点排名,因此您必须手动调整所有其他节点。
  4. 磨损的末端仍然是圆形的,占据了很大的空间。这可以通过设置 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;
}

using concentrate

关于graphviz - 对 DOT 中的边进行分组 (Graphviz),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47719267/

相关文章:

graphviz - 使用 gvpr 从 Graphviz 中提取图层和子图簇

python - 在 Gephi 中可视化未连接的图

layout - Graphviz Selfloops 重叠标签

dot - 合并 DOT 中具有相同头部和尾部的 2 条边

svg - 每次进行小的更改时,如何避免重新计算graphviz中的坐标?

GraphViz 节点放置和 Rankdir

python-3.x - 图形大小问题

linux - 使用 neato 问题进行编译

python - Graphviz 重叠边缘标签

python - Pygraphviz/networkx 设置节点级别或层