Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Forcing "main line" nodes into a straight line in Graphviz (or alternatives)

Tags:

graphviz

dot

I'm trying to use Graphviz dot (but am willing to use something else) to generate a graph with a long "main line" of nodes, and many small branches. I'd like the main line to be straight from left to right, with the small branches above or below it. However, Graphviz "balances" the two branches, so I end up with a crooked graph.

To illustrate, here's a sketch similar to what I currently get:

Current Graph

And this is what I actually want:

Wanted graph

Is there any way to force or encourage Graphviz to generate a graph like the second one? I may be able to use "dummy" second branches to have it do a 3-way layout, and then hide/delete the dummies afterward, but if there's a better option that would be preferable.

like image 563
Chad Birch Avatar asked Jan 12 '11 16:01

Chad Birch


1 Answers

A second solution using the group attribute of nodes - again a directed graph:

From the graphviz dot reference:

If the end points of an edge belong to the same group, i.e., have the same group attribute, parameters are set to avoid crossings and keep the edges straight.

So here we go:

digraph g{
    rankdir="LR";
    node[width=0.15, height=0.15, shape=point, group=main];
    edge[arrowhead=none];
    1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8;
    node[group=branches];
    2 ->  9 -> 10;
    5 -> 11 -> 12;
}

Output is exactly the same as in my first answer.

like image 109
marapet Avatar answered Nov 11 '22 14:11

marapet