4

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

digraph test_alignment
{
    {rank=same; a -> b;}
    a -> c;
    b -> c;
    c -> d;
    d -> e;
    d -> f;
    {rank=same; e -> f;}
}

初始图

我想标记 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;}
}

同一张图,一个标签

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

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

我是否错过了一些微不足道的事情,或者我是否正在尝试一些我不应该做的事情而不是让 dot 做它的事情?

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

dot test_alignment.dot -Tpng -O
4

1 回答 1

5

如果需要,您可以尝试使用该xlabel属性forcelabels。从描述:

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

于 2014-07-25T13:12:24.413 回答