Another way to produce ~ same result as @jjlong, using group and constraint=false
/******************************************************************************
forum - https://forum.graphviz.org/t/arrange-nodes-between-ranks-correctly/2503
- now
- rankdir=LR
- removed rank=same - not needed
- changed grouping A1, A2, A3 ...
- added constraint=false keeps the groups linear
******************************************************************************/
digraph {
rankdir=LR; // changed
A1 [group=1]
A2 [group=1]
A3 [group=1]
B1 [group=2]
B2 [group=2]
B3 [group=2]
C1 [group=3]
C2 [group=3]
C3 [group=3]
A1 -> B1
B1 -> C1
//A1 -> B2
A1 -> A2
A1 -> A3 [constraint=false] // constraint=false keeps the group linear
A2 -> A3
B1 -> B2
B2 -> B3
B1 -> B3 [constraint=false] // constraint=false keeps the group linear
B2 -> A2
//B3 -> C2
C1 -> C2
C2 -> C3
//B1 -> C2
C3 -> B2
}
Giving:
