Graphviz垂直排序

14

我有一组GraphViz节点,其特点是:

digraph {
    A->B;
    A->C;
    A->D;
}

但是BCD按时间顺序发生!

enter image description here

如果有一种方法可以指示每个节点应该出现在哪个垂直层次上(层数的数量可能事先不知道),那将非常好。

有人对如何实现这一点有想法吗?

1个回答

22

如果希望一个节点在垂直方向上与其他节点显示在不同的层级,则可以添加不可见边缘。将这些节点分配到相同的中,可以提示Graphviz尽可能在一条直线上进行布局。

例如:

digraph g{
  A;
 node[group=a];
 B;C;D;
 A -> B;
 A -> C;
 A -> D;
 edge[style=invis];
 B->C->D;
}

在此输入图像描述

另一种选择是使用一个垂直方向的(不可见)节点线,然后通过在同一子图中定义相同等级的节点并使用rank=same强制相同的等级:

digraph g{
 {rank=same; l1[style=invis, shape=point]; A;}
 {rank=same; l2[style=invis, shape=point]; B;}
 {rank=same; l3[style=invis, shape=point]; C;}
 {rank=same; l4[style=invis, shape=point]; D;E;F;}

 A -> B;
 A -> C;
 A -> D;
 edge[style=invis];
 l1->l2->l3->l4;
}

enter image description here


谢谢!对我来说,添加不可见链接以表达顺序关系的方法非常有效。简单而甜美! - Yu Shen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接