我是Graphviz的新手,对不起,如果我的问题太天真了。
在dot中,我试图获得几个图形图像,其中节点处于固定位置,但具有不同的弧形。然而,即使是弧形配置的微小修改,也会在布局上产生巨大差异。我找到了一些解决方法(通过将某些对冲保持为隐形,或使用"返回"选项)。但是,我想知道是否有更优雅的方法来避免这种情况,其中一个弧形方向的唯一修改给出了完全不同的布局。
例如,请看:
digraph exempleUPFM {
label=mylab;
ratio = 0.5;
spline = line; forcelabels=true;
node [shape = circle;style=filled; color=lightgrey;];
1 [xlabel="10" fontcolor= blue group=g1];
4 [xlabel="-6" fontcolor= red group=g1];
2 [xlabel="4" fontcolor= blue group=g2];
5 [xlabel="-8" fontcolor= red group=g2];
node [shape = circle; style=""]
{rank=same; 1 2}
{rank=same; 4 5}
1 -> 2 [label=" 1"]
1 -> 3 [label=" 8"]
1 -> 4 [label=" 1"]
2 -> 3 [label=" 2"]
3 -> 4 [label=" 1"]
3 -> 5 [label=" 4"]
4 -> 5 [label=" 12"]
5 -> 2 [label=" -7"]
}
或者
digraph exemple2UPFM {
label=mylab;
ratio = 0.5;
spline = line; forcelabels=true;
node [shape = circle;style=filled; color=lightgrey;];
1 [xlabel="10" fontcolor= blue group=g1];
4 [xlabel="-6" fontcolor= red group=g1];
2 [xlabel="4" fontcolor= blue group=g2];
5 [xlabel="-8" fontcolor= red group=g2];
node [shape = circle; style=""];
{rank=same; 1 2}
{rank=same; 4 5}
1 -> 2 [label=" 1"]
1 -> 3 [label=" 8"]
1 -> 4 [label=" 1"]
2 -> 3 [label=" 2"]
3 -> 4 [label=" 1"]
3 -> 5 [label=" 4"]
5 -> 4 [label="-12"]
5 -> 2 [label=" -7"]
}
在这种特殊情况下,唯一的区别是弧线方向在5和4之间。但是图形布局的差异是残酷的。在第二个例子中,如果我保持弧4 - > 5,我添加"返回"选项,布局恢复原状。
你是否有任何线索,为什么有一种方法可以避免节点的位置在任何最小弧修改时改变?
非常感谢你的帮助。
答案 0 :(得分:2)
graphviz
并不知道您希望图表看起来如何。它按照您给出的说明进行计算。在默认布局(从上到下)中,当您说A -> B
时,它将第一个节点置于第二个节点的顶部,如果它们具有相同的等级,则将第一个节点放在第二个节点的左侧。如果你粗暴地看着""改变了布局,你看到了逻辑。
因此,如果您想继续使用第一个商家信息的节点安排,那么在这两种情况下说2 -> 5[ dir = back ]
都是一个更安全的选择,4 -> 5[ dir = back ]
应该毫不奇怪。如果你保留graphviz
'在逻辑上,您应该能够在大多数情况下对布局进行排序。不可见的节点和边缘,或者为边缘增加权重是下一个层次。
只是为了说明一下:
digraph exempleSO
{
label=mylab;
ratio = 0.5;
spline = line;
forcelabels=true;
node [shape = circle;style=filled; color=lightgrey;];
1 [xlabel="10" fontcolor= blue group=g1];
4 [xlabel="-6" fontcolor= red group=g1];
2 [xlabel="4" fontcolor= blue group=g2];
5 [xlabel="-8" fontcolor= red group=g2];
node [shape = circle; style=""]
{rank=same; 1 2}
{rank=same; 4 5}
1 -> 2 [label=" 1"]
1 -> 3 [label=" 8"]
1 -> 4 [label=" 1"]
2 -> 3 [label=" 2"]
3 -> 4 [label=" 1"]
3 -> 5 [label=" 4"]
4 -> 5 [dir = back, label=" 12 back"]
2 -> 5 [dir = back, label=" -7 back"]
}
产量