如何防止边缘标签弄乱graphviz中的布局?

Kef*_*fen 3 label graph-theory dot graphviz edge-list

我有一个简单的垂直图,使用以下代码看起来漂亮且对称,没有任何标签:

digraph test_alignment
{
    {rank=same; a -> b;}
    a -> c;
    b -> c;
    c -> d;
    d -> e;
    d -> f;
    {rank=same; e -> f;}
}
Run Code Online (Sandbox Code Playgroud)

初始图

我想标记 A 和 B 之间的边缘以及 E 和 F 之间的边缘,对每个标签使用相同的字符串。我期待相同的输出,除了带有相同标签的更长的 A->B 和 E->F 边。

不幸的是,一旦我向这些边之一添加标签,总体布局就会看起来有点歪斜(如果我向 E->F 边添加标签,结果是相似的):

digraph test_alignment
{
    {rank=same; a -> b [label="Label"];}
    a -> c;
    b -> c;
    c -> d;
    d -> e;
    d -> f;
    {rank=same; e -> f;}
}
Run Code Online (Sandbox Code Playgroud)

一个标签的同一张图

我对 graphviz 非常陌生,并且根据 Stack Overflow 上的许多问题,我一直在尝试不同的秩和约束组合,我尝试使用集群来查看它是否可以独立地保持顶部和底部正确对齐,并尝试使用dot、ccomp、gvpack 和neato 的组合产生了类似的结果。

似乎总是可以归结为在具有相同等级的节点之间的边缘添加标签会影响这些节点以我尚不理解的方式定位的事实。

我是否遗漏了一些微不足道的东西,或者我是否在尝试一些我不应该做的事情而不是让 dot 做它的事情?

我使用的是 dot - graphviz version 2.36.0 (20140111.2315) 并且链接的图片仅使用 dot 生成(尽管我在使用时获得了类似的结果:

dot test_alignment.dot -Tpng -O
Run Code Online (Sandbox Code Playgroud)

mar*_*pet 5

如有必要xlabel,您可以尝试使用该属性forcelabels。从描述来看:

... 对于边缘,标签将放置在边缘中心附近。这在 dot 中很有用,以避免在使用边缘标签扭曲布局时偶尔出现的问题。...