我有一组 GraphViz 节点,这样:

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

但是 BCD 是按时间顺序发生的!

Graphviz 垂直排序-LMLPHP

如果有某种方法可以指示每个节点应该出现在哪个垂直级别(其中级别的数量可能事先未知),那就太好了。

有没有人有关于如何实现这一点的想法?

最佳答案

将节点显示在与其他节点不同的等级(垂直级别)上的一种选择是添加 不可见边
为这些节点分配相同的 group 表示如果可能,graphviz 将它们布置在一条直线上。

例如:

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

Graphviz 垂直排序-LMLPHP

另一种选择是拥有一条垂直线(不可见)节点,然后通过使用 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;
}

Graphviz 垂直排序-LMLPHP

关于Graphviz 垂直排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19308847/

10-13 09:09