使用RANK=SAME时丢失x,y边 [英] Lost x y edge when using rank=same
本文介绍了使用RANK=SAME时丢失x,y边的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用GraphViz可视化双重链接列表。 示例:
digraph List {
rankdir=LR;
node [shape=record];
0 [label="{<prev> | <length> 2 | <tone> 1 | <next>}"];
1 [label="{<prev> | <length> 1 | <tone> A | <next>}"];
0:<next>:c -> 1:n [arrowhead=vee, arrowtail=dot, dir=both, tailclip=false, arrowsize=1.2];
1:<prev>:c -> 0:s [arrowhead=vee, arrowtail=dot, dir=both, tailclip=false, arrowsize=1.2];
}
结果很好,除了元素的高度。随着每个连续元素的增加,高度会降低,我希望所有元素都在相同的高度上。但当我添加
{rank=same; 0; 1;}
发生GraphViz错误(Error: lost 1 0 edge
)。现在,我能找到的对此错误的唯一修复方法是用纯文本节点替换记录形状的节点,并使用HTML标签来创建记录形状。
我尝试过此操作,但仍产生相同的错误。
使用HTML标签的代码:
digraph List {
rankdir=LR;
node [shape=plaintext];
0 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="prev"> </TD>
<TD PORT="length">2</TD>
<TD PORT="note">1</TD>
<TD PORT="next"> </TD>
</TR>
</TABLE>>];
1 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR>
<TD PORT="prev"> </TD>
<TD PORT="length">1</TD>
<TD PORT="note">A</TD>
<TD PORT="next"> </TD>
</TR>
</TABLE>>];
0:next:c -> 1:n [arrowhead=vee, arrowtail=dot, dir=both, tailclip=false, arrowsize=0.8];
1:prev:c -> 0:s [arrowhead=vee, arrowtail=dot, dir=both, tailclip=false, arrowsize=0.8];
}
如有任何有关如何解决此问题的建议,我将不胜感激。
上一次尝试如下所示:
digraph List {
rankdir=LR;
node [shape=record];
0 [label="{<prev> | <firstName> Wolfgang Amadeus | <lastName> Mozart | <instrument> Klavier | <next>}"];
1 [label="{<prev> | <length> 1 | <tone> A | <next>}"];
0:<next>:c -> 1:<prev> [arrowhead=vee, arrowtail=dot, dir=both, tailclip=false, arrowsize=0.8];
1:<prev>:c -> 0 [arrowhead=vee, arrowtail=dot, dir=both, tailclip=false, arrowsize=0.8];
}
这里,这两个箭头之间没有明显的区别。在节点之间使用两个不同的箭头也可以解决我的问题。
推荐答案
您可以在第一个节点的最后一个元素和第二个节点的第一个元素之间使用强(重&q;)链接(一条不可见的边)对齐节点。
将此行作为类似于HTML的代码的最后一行添加到代码中(这比记录形状灵活得多)
0:next:e -> 1:prev:w[ weight = 100, style = invis ];
您将得到
我想这就是你想要的。
这篇关于使用RANK=SAME时丢失x,y边的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文