Graphviz:如何获得固定节点位置

Graphviz:如何获得固定节点位置,graph,graphviz,Graph,Graphviz,我是Graphviz的新手,如果我的问题太简单,我很抱歉 在dot中,我试图获得几个图的图像,其中节点位于固定位置,但具有不同的圆弧。然而,即使是对arc配置的一个小修改,也会在布局上产生巨大的差异。我找到了一些解决办法(通过保持某些对冲不可见,或使用“后退”选项)。然而,我想知道是否有一种更优雅的方式来避免这种情况,在这种情况下,只修改一个圆弧方向就可以得到完全不同的布局 例如,请参见以下内容: digraph exempleUPFM { label=mylab; ratio = 0.5; s

我是Graphviz的新手,如果我的问题太简单,我很抱歉

在dot中,我试图获得几个图的图像,其中节点位于固定位置,但具有不同的圆弧。然而,即使是对arc配置的一个小修改,也会在布局上产生巨大的差异。我找到了一些解决办法(通过保持某些对冲不可见,或使用“后退”选项)。然而,我想知道是否有一种更优雅的方式来避免这种情况,在这种情况下,只修改一个圆弧方向就可以得到完全不同的布局

例如,请参见以下内容:

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并添加“back”选项,布局将恢复到原始布局

您是否知道为什么会这样,以及是否有办法避免节点的位置在任何最小圆弧修改时发生变化


非常感谢您的帮助。

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"]
}
屈服


谢谢。正如我在邮件中所写,经过一些初步的努力,我发现“后退”选项将布局放回了所需的位置。我现在知道原因了:我现在不知道默认设置和相关行为。将我的回答标记为正确答案/投票-谢谢…嗨,我很抱歉,vaettchen!是的,你的回答很有价值,对我帮助很大。