【发布时间】:2021-08-08 17:12:33
【问题描述】:
我正在尝试使用 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];
}
这两个箭头之间没有明显的区别。在节点之间设置两个不同的箭头也可以解决我的问题。
【问题讨论】:
标签: graphviz graph-visualization