2013-05-19 76 views
1

我有以下三种:孩子订购graphviz的树

digraph G { 
    subgraph cluster0{ 
     37[label="+"]; 
     42[label="a"]; 
     44[label="b"]; 
     47[label="*"]; 
     46[label="c"]; 
     49[label="d"]; 
     51[label="e"]; 
     53[label="f"]; 
     55[label="g"]; 
     57[label="h"]; 
     61[label="*"]; 
     60[label="i"]; 
     63[label="j"]; 
     37 -> 42[label="c"]; 
     37 -> 44[label="c"]; 
     37 -> 47[label="c"]; 
     37 -> 61[label="c"]; 
     42 -> 37[label="p"]; 
     44 -> 37[label="p"]; 
     47 -> 37[label="p"]; 
     47 -> 46[label="c"]; 
     47 -> 49[label="c"]; 
     47 -> 51[label="c"]; 
     47 -> 53[label="c"]; 
     47 -> 55[label="c"]; 
     47 -> 57[label="c"]; 
     46 -> 47[label="p"]; 
     49 -> 47[label="p"]; 
     51 -> 47[label="p"]; 
     53 -> 47[label="p"]; 
     55 -> 47[label="p"]; 
     57 -> 47[label="p"]; 
     61 -> 37[label="p"]; 
     61 -> 60[label="c"]; 
     61 -> 63[label="c"]; 
     60 -> 61[label="p"]; 
     63 -> 61[label="p"]; 
    } 
} 

输出是在这里:http://i.imgur.com/q1qXkCT.png

在第一*子树儿童的顺序是:G H C D E F,但它应该是C D E F G H。 我注意到,如果我删除subgraph cluster0{的顺序是正确的,但我不能这样做。 你能提出任何其他解决方案吗?

回答

0

Graphviz尝试在没有其他约束条件时保留节点的词法排序。但是,边缘标签可能会影响展示位置,因为它们占用了空间并可能会推动节点。

如果你有一个特定的顺序是必要的,那么你可以试试

{ rank = same; 
46 -> 49 -> 51 -> 53 -> 55 -> 57 [style = invis]; 
} 

引进更多的排序约束成图。

尽管如此,您仍然需要小心,因为它会以非常难以预测的方式来扭曲更复杂的图形。