更改graphviz中子组中节点的顺序

时间:2015-03-19 19:21:12

标签: 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为红色启动y”,“x必须在y之前运行”表示蓝色。

编辑:错误地将第一个'bpx_launch'作为'bpx',因此它没有意义 - 它应该全部读作'bpx_launch' - 应该没有名为'bpx'的节点

1 个答案:

答案 0 :(得分:1)

目前(版本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;
}

你得到了

enter image description here