Graphviz交叉边缘
我试图避免20-> 40和30-> 70之间的交叉线。有谁知道如何做到这一点?我使用单点来理顺边缘,但我会希望渲染引擎避免这些边缘重叠。这里是我的点代码:Graphviz交叉边缘
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
}
我想张贴图片,但计算器不允许我这样做...你可以明白我的意思,当你将代码复制到:http://stamm-wilbrandt.de/GraphvizFiddle/
我非常感谢你的帮助!
你可以通过添加DP5 P4之间一个看不见的边缘给graphviz的一个暗示:
{
rank=same;
p3 -> 40;
40 -> p4;
p4 -> p5 [style=invis]; // new invisible edge
p5 -> 70;
70 -> p6;
}
如果您无法添加可见边(动态图形生成),确保节点它们是子图的一部分在子图中首先出现,因此避免了前期节点定义。
在这个例子中,我删除了脚本开始处的节点定义并且内联了肘关节节点的样式。
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
}
谢谢,这适用于这个静态示例!我怎样才能在动态模式下完成这项工作?我不知道在什么“级别”节点将显示如此动态添加隐藏的边缘似乎很难......真的感谢你的帮助! – 2014-09-24 18:57:47
我和你在一起,看到无形的边缘!我添加了一个更通用的解决方案,希望它能适用于您的真实案例。 – marapet 2014-09-24 20:28:15
靠近!因此,不提供节点定义使这项工作...不幸的是,我确实需要定义的节点,因为节点的高度和宽度是根据标签大小计算的... – 2014-09-24 21:00:03
+1的链接GraphvizFiddle - 不知道这个工具,伟大的东西! – marapet 2014-09-24 18:39:43