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

时间:2014-07-25 12:23:34

标签: layout label graphviz dot edge

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

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

The initial graph

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

The same graph with one label

我对graphviz很新,并且在StackOverflow的许多问题之后,我一直在尝试不同的排名和约束组合,我尝试使用群集来查看它是否会保持顶部和底部部分正确对齐,尝试使用dot,ccomp,gvpack和neato的混合产生类似的结果。

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

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

我使用dot-graphviz版本2.36.0(20140111.2315),链接的图片只用点制作(虽然我在使用时获得了类似的结果:

dot test_alignment.dot -Tpng -O

非常感谢!

1 个答案:

答案 0 :(得分:4)

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

  

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