Graphviz交叉边

Graphviz交叉边,graphviz,dot,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, h

我试图避免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不允许我这样做。。。当您将代码复制到以下位置时,您可以理解我的意思:


我真的很感谢你在这方面的帮助

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

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

如果无法添加不可见边(动态图形生成),请确保作为子图形一部分的节点首先出现在子图形中,因此避免预先定义节点

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


+1用于GraphvizFiddle的链接-不知道这个工具,很棒的东西!谢谢,这对这个静态示例有效!我怎样才能使它在动态模式下工作?我事先不知道节点将显示在什么“级别”,所以动态添加隐藏边似乎很困难。。。非常感谢你在这方面的帮助!关于看不见的边缘,我和你在一起!我添加了一个更通用的解决方案,希望它能适用于您的实际案例。越来越近了!因此,不提供节点定义使此工作正常。。。不幸的是,我确实需要定义节点,因为节点的高度和宽度是根据标签大小计算的……在上面的示例中,节点确实具有与以前完全相同的属性(高度、宽度、标签),唯一的区别是它们没有首先列出。如果你有一些预先计算的宽度/高度(在graphviz之外),你仍然可以首先声明节点及其属性,只需在它首先出现的子图中进行声明(如p1、p2等节点)。太好了,我在你之前的评论之后就知道了。再次感谢你的帮助。
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

}