我将要编写一个脚本来生成具有以下两个特征的graphviz/dot图:
按照特定的顺序。
具有这些特征,我希望得到的结果(即点生成的图)看起来像这样:
给他们订购
但是,我无法使dot表现出自己想要的方式。这是一个点文件来演示我的问题:
digraph G {
node [shape=plaintext fontname="Arial"];
0 [label="zero" ];
1 [label="one" ];
2 [label="two" ];
3 [label="three" ];
4 [label="four" ];
5 [label="five" ];
6 [label="six" ];
7 [label="seven" ];
8 [label="eight" ];
9 [label="nine" ];
10 [label="ten" ];
11 [label="eleven" ];
12 [label="twelve" ];
13 [label="thirteen" ];
14 [label="fourteen" ];
15 [label="fivteen" ];
16 [label="sixteen" ];
17 [label="seventeen" ];
18 [label="eighteen" ];
19 [label="nineteen" ];
20 [label="twenty" ];
21 [label="twenty-one"];
22 [label="twenty-two"];
0 -> 1 [arrowhead=none];
1 -> 2 [arrowhead=none];
2 -> 7 [arrowhead=none];
7 -> 8 [arrowhead=none];
8 -> 9 [arrowhead=none];
8 -> 10 [arrowhead=none];
9 -> 10 [color="#aaaaaa" constraint=false];
10 -> 11 [arrowhead=none];
10 -> 12 [arrowhead=none];
11 -> 12 [color="#aaaaaa" constraint=false];
7 -> 13 [arrowhead=none];
8 -> 13 [color="#aaaaaa" constraint=false];
13 -> 14 [arrowhead=none];
7 -> 15 [arrowhead=none];
13 -> 15 [color="#aaaaaa" constraint=false];
15 -> 16 [arrowhead=none];
15 -> 17 [arrowhead=none];
16 -> 17 [color="#aaaaaa" constraint=false];
2 -> 3 [arrowhead=none];
7 -> 3 [color="#aaaaaa" constraint=false];
3 -> 4 [arrowhead=none];
2 -> 5 [arrowhead=none];
3 -> 5 [color="#aaaaaa" constraint=false];
5 -> 6 [arrowhead=none];
2 -> 18 [arrowhead=none];
5 -> 18 [color="#aaaaaa" constraint=false];
18 -> 19 [arrowhead=none];
19 -> 20 [arrowhead=none];
19 -> 21 [arrowhead=none];
20 -> 21 [color="#aaaaaa" constraint=false];
18 -> 22 [arrowhead=none];
19 -> 22 [color="#aaaaaa" constraint=false];
}
结果是
请注意, sibling 之间的排序由灰色边缘(箭头)指示。
因此,例如,我对七个->三个->五个->十八个 sibling 感到满意,因为它们是按照正确的顺序从左到右绘制的(如箭头所示)。
但是我对8个 sibling -> 13-> 15个 sibling 感到不满意,因为它们的边缘与其他边缘相交,并且因为它们的排列顺序不像我想要的那样从左到右。
而且,九个->十个,二十个->二十一个和十九个-> 22个方向错误。
我知道,如果我使用其他(不可见的)边缘和
weight
属性,甚至可能使用更多功能,就可以随意获得图片。但是由于图形(其中有许多图形)是由脚本生成的,所以我无法手动执行此操作。那么,有没有办法实现我想要的?
最佳答案
在这种情况下,它实际上非常简单:脚本中节点的出现顺序确实很重要。在您的脚本中,它们从节点0到节点22出现,并进行布局以尽可能地尊重这一点。但是,它们应该按照您添加边的顺序出现(0,1,2,7,3,5,18,...)。因此,最简单的解决方案是将定义标签的块移动到定义边缘的块之后,您将获得:
没有权重,没有看不见的边缘,也没有看不见的节点。
关于generator - 脚本如何最佳地布局纯分层的graphviz/dot图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9238672/