Graphviz交叉边缘

时间:2014-09-24 17:53:51

标签: graphviz dot

我试图避免在20-> 40和30-> 70之间穿过线。有谁知道如何做到这一点?我使用单点来理顺边缘但我希望渲染引擎避免这些边缘重叠。这是我的点代码:

digraph {
graph [splines="ortho", nodesep = "1", overlap = false];
node [shape=rectangle, color=lightgrey, style=filled ];

10
20
30
40
50
60
70
80
90


node[shape=none, width=0, height=0 label=""];
edge[dir=none];

{rank=same;
p1->10
10->p2
}

p1->20
p2->30


{rank=same;
p3->40
40->p4
}

p3->50
p4->60


{rank=same;
p5->70
70->p6
}

p5->80
p6->90


20->40
30->70
}

我想发布一个图片,但stackoverflow不允许我这样做...你可以看到我将你的代码复制到我的意思:http://stamm-wilbrandt.de/GraphvizFiddle/

我真的很感谢你对此的帮助!

1 个答案:

答案 0 :(得分:1)

你可以通过在p4和dp5之间添加一条不可见边来给graphviz一个提示:

{
    rank=same;
    p3 -> 40;
    40 -> p4;
    p4 -> p5 [style=invis]; // new invisible edge
    p5 -> 70;
    70 -> p6;
}

如果您无法添加不可见边(动态图生成),请确保属于子图的节点确实首先出现在子图中,因此避免使用前期节点定义。

在这个例子中,我删除了脚本开头的节点定义,并内联了肘关节节点的样式。

Here's the GraphvizFiddle

digraph {
graph [splines="ortho", nodesep = "1", overlap = false];
node [shape=rectangle, color=lightgrey, style=filled ];

//node[shape=none, width=0, height=0, label=""];
edge[dir=none];

{
 rank=same;
 p1[shape=none, width=0, height=0, label=""];
 p2[shape=none, width=0, height=0, label=""];
 p1->10
 10->p2
}

p1->20
p2->30

{
 rank=same;
 p3[shape=none, width=0, height=0, label=""];
 p4[shape=none, width=0, height=0, label=""];
 p3->40
 40->p4
}


p3->50
p4->60

{
 rank=same;
 p5[shape=none, width=0, height=0, label=""];
 p6[shape=none, width=0, height=0, label=""];
 p5->70
 70->p6
}

p5->80
p6->90


20->40
30->70

}