digraph Taskflow { newrank=true; #columns subgraph { p00[label="pipe-0"]; p10[label="pipe-0"]; p20[label="pipe-0"]; p30[label="pipe-0"]; } subgraph { p01[label="pipe-1"]; p11[label="pipe-1"]; p21[label="pipe-1"]; p31[label="pipe-1"]; } subgraph { p02[label="pipe-2"]; p12[label="pipe-2"]; p22[label="pipe-2"]; p32[label="pipe-2"]; } subgraph cluster0 { rank="same"; style="dashed"; p00; p01; p02; } subgraph cluster1 { rank="same"; style="dashed"; p10; p11; p12; } subgraph cluster2 { rank="same"; style="dashed"; p20; p21; p22; } subgraph cluster3 { rank="same"; style="dashed"; p30; p31; p32; } p00 -> p01; p01 -> p02; p10 -> p11; p11 -> p12; p20 -> p21; p21 -> p22; p30 -> p31; p31 -> p32; p00 -> p10; p01 -> p11; p02 -> p12; p10 -> p20; p11 -> p21; p12 -> p22; p20 -> p30; p21 -> p31; p22 -> p32; }