更改 graphviz 子组中节点的顺序

change order of nodes in subgroup in graphviz

在下面的代码中:

digraph G { 
  splines=true;

  bpx_launch -> bpx_preproc [color=red];

  subgraph cluster_0 {
    slice01;
    slice02;
    slice03;
    slice_i;
    slice_N;
    color=black;
  }

  bpx_launch -> bpx_postproc [color=red];
  bpx_launch -> bpx_validate [color=red];
  bpx_launch -> slice01 [color=red];
  bpx_launch -> slice02 [color=red];
  bpx_launch -> slice03 [color=red];
  bpx_launch -> slice_i [color=red];
  bpx_launch -> slice_N [color=red];

  bpx_preproc -> slice01 [color=blue];
  bpx_preproc -> slice02 [color=blue];
  bpx_preproc -> slice03 [color=blue];
  bpx_preproc -> slice_i [color=blue];
  bpx_preproc -> slice_N [color=blue];

  slice01 -> bpx_postproc [color=blue];
  slice02 -> bpx_postproc [color=blue];
  slice03 -> bpx_postproc [color=blue];
  slice_i -> bpx_postproc [color=blue];
  slice_N -> bpx_postproc [color=blue];

  bpx_postproc -> bpx_validate [color=blue];
}

我最终得到 slice_N, slice01, slice02, slice03, slice_i,但我更喜欢 slice01, slice02, slice03, slice_i, slice_N。有什么办法可以改变这个顺序吗?

另外,如何添加箭头键?我想展示一个小图例,解释 "x -> y" 表示 "x launches y" 表示红色,"x must run before y" 表示蓝色。

编辑:错误地将第一个 'bpx_launch' 作为 'bpx' 所以它没有意义 - 它应该全部读作 'bpx_launch' - 不应该有名为 [=25 的节点=]

目前(版本 2.38)除按 rankdir 以外的顺序在集群中不起作用,既不按出现顺序也不按边缘。

无簇

digraph G { 
    splines=true;

    legend [shape=plaintext label=<<table  border="0" cellborder="0"><tr><td><font color="red">- launches</font></td></tr><tr><td><font color="blue">- runs before</font></td></tr></table>> ]

    { rank=same color=black
        slice01 -> slice02 -> slice03 -> slice_i -> slice_N [style=invis]
    }

    edge [color=red]
    bpx_launch -> bpx_preproc;
    bpx_launch -> bpx_postproc;
    bpx_launch -> bpx_validate;
    bpx_launch -> slice01;
    bpx_launch -> slice02;
    bpx_launch -> slice03;
    bpx_launch -> slice_i;
    bpx_launch -> slice_N;

    edge [color=blue]
    bpx_preproc -> slice01;
    bpx_preproc -> slice02;
    bpx_preproc -> slice03;
    bpx_preproc -> slice_i;
    bpx_preproc -> slice_N;
    slice01 -> bpx_postproc;
    slice02 -> bpx_postproc;
    slice03 -> bpx_postproc;
    slice_i -> bpx_postproc;
    slice_N -> bpx_postproc;
    bpx_postproc -> bpx_validate;
}

你得到