开发者

How to prevent edges in graphviz to overlap each other

开发者 https://www.devze.com 2023-01-20 22:54 出处:网络
I have a graph I\'ve created in graphviz, but the problem is that edges overlap each other (I have开发者_开发问答 5-7 nodes in each row), so it is hard to tell for each node which are the nodes it con

I have a graph I've created in graphviz, but the problem is that edges overlap each other (I have开发者_开发问答 5-7 nodes in each row), so it is hard to tell for each node which are the nodes it connects.

How can I make the edges not to overlap each other? Have them cross each other is OK.


I'm assuming you have a directed graph which you layout with dot.

I don't think there's a magic switch to prevent overlapping edges. Graphviz tries to do that out of the box.

Some suggestions that may help, depending on the graph:

  • edge concentrators (concentrate=true): Merge multiple edges with a common endpoint into single edges, and have partially parallel edges share parts of their path.
  • ports : Edges can have their origin and endpoint on a specific port (n, ne, e, se, s, sw, w, nw, w, c, _). Depending on the edge ports, the edge changes its form (spline).
  • invisible nodes : There may be cases where introducing invisible nodes to route edges can have the desired effect.


Another approach is to add an overlap property to the graph. Allowable properties are scale (which will vastly increase the size of the output) or false (which will not increase the size as much, but will probably cause edges to overlap nodes).

overlap = scale;

If you're using overlap=false, you can get rid of edge overlaps with nodes by adding the attribute splines=true:

overlap = false;
splines = true;

This will slow down generation time noticeably for large graphs.


Even for quite trivial graph I see graphviz (neato, fdp) to generate overlaps. For example:

graph G {
0;
1;
2;
3;
0--1 ;
1--2 ;
2--3 ;
3--0 ;
}

Produces a cross in my version of the code 2.38.0.

From the documentation they recommend trying with different random seeds in these cases. Eventually for more complex diagrams crossings will be unavoidable, I am not sure how much effort the engine puts in avoiding crossing.

For example, this worked for me:

neato -Gstart=5 file.dot -Tps -o file.ps
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号