【发布时间】:2021-06-24 12:07:59
【问题描述】:
我有一个 PATRICA trie,我正在为其生成一个 GraphViz 文件。内部节点是跳过值,边缘是点 0 和实线 1。最好是 0 在 1 的左侧,给出叶子的字母顺序。我重新安排了访问图表的顺序,所以dot 给出了这个结果。但是,当我使用子图将它们分组在森林中的树中时,我似乎无法强制 dot 可靠地尊重子图间边缘的顺序。
digraph {
rankdir=TB;
node [shape = box, style = filled, fillcolor = lightsteelblue];
// forest size 2.
subgraph cluster_tree0 {
style = filled; fillcolor = lightgray; label = "tree 0";
// branches
branch0_0 [label = "3", shape = none, fillcolor = none];
branch0_0 -> branch0_1;
branch0_1 [label = "0", shape = none, fillcolor = none];
branch0_1 -> branch0_2 [style = dashed];
branch0_2 [label = "1", shape = none, fillcolor = none];
branch0_2 -> leaf0_1 [style = dashed, color = royalblue];
branch0_2 -> leaf0_2 [color = royalblue];
branch0_1 -> branch0_3;
branch0_3 [label = "2", shape = none, fillcolor = none];
branch0_3 -> leaf0_3 [style = dashed, color = royalblue];
branch0_3 -> leaf0_4 [color = royalblue];
// leaves
leaf0_1 [label = "u"];
leaf0_2 [label = "v"];
leaf0_3 [label = "x"];
leaf0_4 [label = "y"];
}
branch0_0 -> branch1_0 [lhead = cluster_tree0, ltail = cluster_tree1, color = firebrick, style = dashed];
subgraph cluster_tree1 {
style = filled; fillcolor = lightgray; label = "tree 1";
// branches
branch1_0 [label = "0", shape = none, fillcolor = none];
branch1_0 -> leaf1_0 [style = dashed, color = royalblue];
branch1_0 -> branch1_1;
branch1_1 [label = "1", shape = none, fillcolor = none];
branch1_1 -> leaf1_1 [style = dashed, color = royalblue];
branch1_1 -> branch1_2;
branch1_2 [label = "0", shape = none, fillcolor = none];
branch1_2 -> leaf1_2 [style = dashed, color = royalblue];
branch1_2 -> leaf1_3 [color = royalblue];
// leaves
leaf1_0 [label = "f"];
leaf1_1 [label = "m"];
leaf1_2 [label = "n"];
leaf1_3 [label = "o"];
}
}
在一个图上它工作正常,但子图被颠倒到我想要的顺序。
我颠倒了文件中的顺序,它看起来仍然一样。我玩弄了它,我可以通过rank=same、ordering=out 和invis 以某种方式将它转过来,但我希望它是程序化的。有没有什么简单的方法可以把代表0的红色虚线画在代表1的实线的左边而不是右边?
【问题讨论】:
-
您是在问如何以编程方式将“Tree 1”置于“Tree 0”的左侧?
-
是的,这就是我想要的。这样字母顺序就可以了。在 ASCII 中,所有字母的第 4 个 MSB 为 0 表示树 1,1 表示树 0。
-
您是如何使用 rank=same、ordering=out 和 invis 做到这一点的?
-
我想我可以向后画,“branch1_0 -> branch0_0 [lhead = cluster_tree1, ltail = cluster_tree0, color = firebrick, style = dashed, dir = back];”它会以正确的方式对它们进行排序,但垂直间距错误;很难预测。我尝试了很多东西。
标签: graphviz trie dot subgraph