digraph auth { nodesep=0.5; rankdir="RL"; C [label="Create (1,1)"]; BJ [label="Bob's Join (2,1)", color=red]; BJ2 [label="Bob's Join (2,2)", color=red]; BJ2 -> BJ [color=red, dir=none]; subgraph cluster_foo { A1 [label="Alice's invite (4,1)", color=blue]; A2 [label="Alice's Join (4,2)", color=blue]; A3 [label="Alice's Join (4,3)", color=blue]; A3 -> A2 -> A1 [color=blue, dir=none]; color=none; } PL1 [label="Power Level (3,1)", color=darkgreen]; PL2 [label="Power Level (3,2)", color=darkgreen]; PL2 -> PL1 [color=darkgreen, dir=none]; {rank = same; C; BJ; PL1; A1;} A1 -> C [color=grey]; A1 -> BJ [color=grey]; PL1 -> C [color=grey]; BJ2 -> PL1 [penwidth=2]; A3 -> PL2 [penwidth=2]; A1 -> PL1 -> BJ -> C [penwidth=2]; }