图形渲染软件,尊重节点和边的相对顺序

Graph rendering software, which respects relative order of Nodes and Edges

我正在为一组给定的节点和边生成一个 (GraphViz) "dot" 文件。节点在 y 维度中排序,rank=same,在 rank 中的 x 维度中。边按绘制顺序排序。不幸的是 "dot" 不遵守 x 维度的顺序。如果可以,我将为平面有向图实现无交叉布局。不管是循环的还是非循环的。

我的问题:

  1. 如何告诉 "dot" 尊重节点和边的相对顺序
  2. 是否有 "dot" 的替代方案,它尊重相对顺序,即接受布局,并进行物理渲染。

抱歉,无法上传点文件。Sample.dot file

非常感谢。我认为 "rank=same;0;8;" 隐式表示与 "rank=same;0->8 [style=invis];" 相同。 无论如何,我担心的不是交叉边缘。这似乎是一个错误,因为 (6) 和 (2) 留有足够的空间来画一条线。必须将所有内容向右移动一点。 我的算法生成一个顺序,使得可以绘制每条树(绿色)边 down/right、每条交叉(橙色)边 down/left 和每条后(红色)边 up/left。如果图形是平面的,则没有交叉点。为了实现这一点,(8) 必须画在 (0) 的右边。我真的很高兴,因为如果我使用你的技术,就会发生这种情况。

digraph {
    graph [charset=latin1, size ="19,46, 11,12"]
    node [shape=box, fontname="Comic Sans MS", fontsize=8, height=0.2, width=0.2, ordering=out]
{ rank=same; 0 -> 8 [style=invis]; }
{ rank=same; 1; }
{ rank=same; 2; }
{ rank=same; 5 -> 9; [style=invis]; }
{ rank=same; 6 -> 7 -> 10; [style=invis]; }
{ rank=same;3; }
{ rank=same;4; }
0 -> 1 [color=green]
1 -> 2 [color=green]
8 -> 2 [color=orange]
2 -> 5 [color=green]
5 -> 6 [color=green]
6 -> 2 [color=red, tailport=w, headport=w]
5 -> 7 [color=green]
7 -> 4 [color=green]
2 -> 3 [color=green]
2 -> 9 [color=green]
9 -> 10 [color=green]
10 -> 3 [color=orange]
3 -> 4 [color=orange]
 }

及其布局1