Graphviz垂直排序

Ric*_*ard 10 dot graphviz

我有一组GraphViz节点,这样:

digraph {
    A->B;
    A->C;
    A->D;
}
Run Code Online (Sandbox Code Playgroud)

但是B,C并且D顺时发生!

在此输入图像描述

如果有某种方式来指示每个节点应该出现在哪个垂直水平上(其中水平的数量可能事先是未知的),那将是很好的.

有没有人想过如何做到这一点?

mar*_*pet 18

使节点显示在与其他节点不同的等级(垂直级别)上的一个选项是添加不可见边缘.group如果可能的话,分配这些节点表示graphviz将它们排成一条直线.

例如:

digraph g{
  A;
 node[group=a];
 B;C;D;
 A -> B;
 A -> C;
 A -> D;
 edge[style=invis];
 B->C->D;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

另一种选择是有一个(不可见的)节点的垂直线,然后通过在同一子图中定义相同等级的节点来强制相同的等级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;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述