Graphviz top to bottom AND left to right

diagram, graphviz, uml

Solution

What you describe seems to be what `dot` does by default.

For example, this graph:

digraph SO {
  a -> a1 -> a2
  b -> b1 -> b2
  c -> c1 -> c2
  d -> d1 -> d2
} 

Comes out like this:

If you have a more complex graph you can force nodes to be at the same height using `rank=same`. For example:

digraph SO {
  { rank = same
    a b c d
  }

  a -> a1 -> a2 
  b -> b1 -> b2 -> b3 -> b4
  c -> c1 
  d -> d1 -> d2 -> d3
  d2 -> a2
}

Comes out like this:

However, if you want `a`, `b`, `c` and `d` to be in a specific order I think you're going to have to use invisible edges like you suggested. The `dot` guide even recommends this:

Edge weights also play a role when nodes are constrained to the same rank. Edges with non-zero weight between these nodes are aimed across the rank in the samedirection (left-to-right, or top-to-bottom in a rotated drawing) as far as possible. This fact may be exploited to adjust node ordering by placing invisible edges (`style="invis"`) where needed.

Problem

Hi there I want to have a uml sequence diagram with dot language, now I have the following problem I want to have the layout as follows with a, b, c and d in a straight line at top but with the lines going straight to the bottom. How can I achieve that? ``` a b c d | | | | | | | | ``` perhaps can I achieve that the a, b, c and d with its belonging edges are clusters where I set a different rankdir for the clusters? EDIT Just found a solution by adding invisible edges between a, b, c and d but any other solutions?

Original source