Graphviz: how to have subgraph nodes lined up in a straight line?

I am trying to visualize the history of my source code repository using Graphviz as follows (top to bottom or left to right doesn't matter):

m1 -> m2 ----> m3 -----> m4 -> m5 \ ^ \-> b1 -> b2 -> b3 -/ 

Given this points file:

 digraph git { subgraph master { m1 -> m2 -> m3 -> m4 -> m5 } subgraph branch { m2 -> b1 // branch from master b1 -> b2 -> b3 b3 -> m4 // merge into master } } 

What attribute should be set so that all nodes of a subgraph (belonging to the same branch) are placed on a straight line?

+8
graphviz
source share
2 answers

The simplest solution is to set the weight branching and merging edges to 0:

 digraph git { rankdir=LR subgraph master { m1 -> m2 -> m3 -> m4 -> m5 } subgraph branch { m2 -> b1[weight=0] // branch from master b1 -> b2 -> b3 b3 -> m4[weight=0] // merge into master } } 

rankdir=LR changes the layout from top to bottom left to right.

graphviz graph

See also my answers to a similar question: Forcing "main line" nodes into a straight line in Graphviz (or alternatives)

+13
source share

You can use the attribute setting rank = same

I think your particular graph is arranged in two perfect lines anyway, but if it was more complex, you can see the effect.

Add two more connections.

 // new complexity m1 -> m5 b3 -> b1 

Now, to make the new resulting graph look better, try the following.

  { rankdir=LR ; rank=same ; m1; m2; m3; m4; m5 } { rankdir=LR ; rank=same ; b1; b2; b3 } subgraph master { m1 -> m2 -> m3 -> m4 -> m5 } subgraph branch { m2 -> b1 // branch from master b1 -> b2 -> b3 b3 -> m4 // merge into master } // new complexity m1 -> m5 b3 -> b1 
+3
source share

All Articles