Some bugs:
- overlap does not apply to dot. It will be ignored.
- rankdir only applies to the root graph. All other references will be ignored.
- minlen is used to set the number of ranks between tail & head. e.g. setting minlen=16 means that you want 16 (or more) ranks between tail & head. (i.e. not inches nor points)
Here is a modified version of your second graph. It uses the group attribute to keep nodes in columns. (It needs some headclip and tailclip fixes)
digraph consort_diagram {
graph [layout = dot, splines=ortho]
node [shape = rectangle, fillcolor = Biege, style="", fillcolor = "", color = ""]
node1 [label = "Cohort 1 (n=6)" group=C1]
node2 [label = "Cohort 2 (n=6)" group=C2]
node3 [label = "Cohort 3 (n=6)" group=C3]
node4 [label = "Cohort 4 (n=6)" group=C4]
node5 [label = "Cohort 5 (n=6)" group=C5]
node6 [label = "Excluded (n=1)\l"]
node7 [label = "Excluded (n=3)\lPatient died before surgery\l"]
node9 [label = "Excluded (n=3)\l"]
node10 [label = "Excluded (n=3)\lPatient declined to participate\l"]
node11 [label = "Cohort 1 (n=5)" group=C1]
node12 [label = "Cohort 2 (n=3)" group=C2]
node14 [label = "Cohort 5 (n=6)" group=C4]
node15 [label = "Cohort 5 (n=6)" group=C5]
node16 [label = "Total (n=14)" group=C3]
node [shape = point, width = 0, style=invis]
P1 [group=C1]
P2 [group=C2]
P3 [group=C4]
P4 [group=C5]
P5 [group=C1]
P6 [group=C2]
P7 [group=C3]
P8 [group=C4]
P9 [group=C5]
subgraph {
rank = same; node1; node2; node3; node4; node5;
}
subgraph {
rank = same; P1; node6;
}
subgraph {
rank = same; node11; node12; node13; node14; node15;
}
subgraph {
rank = same; node6; node7; node9; node10;
}
subgraph {
rank = same; P2; node7;
}
subgraph {
rank = same; node6; node7; node9; node10;
}
subgraph {
rank = same; P3; node9;
}
subgraph {
rank = same; P4; node10;
}
subgraph {
rank = same; P5; P6; P7; P8; P9;
}
edge[style=""];
node1 -> P1 [arrowhead = none];
P1 -> node6;
P1 -> node11;
node2 -> P2 [arrowhead = none];
P2 -> node7;
P2 -> node12;
node4 -> P3 [arrowhead = none];
P3 -> node9;
P3 -> node14;
node5 -> P4 [arrowhead = none];
P4 -> node10;
P4 -> node15;
P7 -> node16;
edge[headclip=false]
node11 -> P5 [arrowhead = none];
node12 -> P6 [arrowhead = none];
node13 -> P7 [arrowhead = none];
node14 -> P8 [arrowhead = none];
node15 -> P9 [arrowhead = none];
edge[headclip=false tailclip=false]
P5 -> P6 -> P7 -> P8 -> P9 [arrowhead = none]
node3 -> node13 [arrowhead = none];
}
Giving: