在DOT中分组边缘(Graphviz)

时间:2017-12-08 17:19:44

标签: 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

1 个答案:

答案 0 :(得分:1)

一种方法是使用虚拟[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属性来修复,但我还没有能够使它工作(似乎两个节点之间的多个边缘总是显示为样条线,无论{的值是多少{1}}是)。
  5. 另一种选择:

    还有concentrate属性,但这只会 收集到同一点的行。它不会1)磨损结束或2)增加线厚度来代表总线:

    splines

    using concentrate