Graphviz:如何在HTML表格单元格之间创建边缘?

时间:2012-11-13 22:29:10

标签: graphviz

请考虑以下代码:

digraph G {
    node [shape=plaintext]

    a [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
                           <TR><TD ID="first" BGCOLOR="gray">first</TD></TR>
                           <TR><TD ID="second" PORT="f1">second</TD></TR>
                           <TR><TD ID="third" PORT="f2">third</TD></TR>
              </TABLE>>];

    b [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
                           <TR><TD ID="first" BGCOLOR="gray">first</TD></TR>
                           <TR><TD ID="second" PORT="f1">second</TD></TR>
                           <TR><TD ID="third" PORT="f2">third</TD></TR>
              </TABLE>>];

    a:first -> b:first;
}

我得到了相当多的警告:

laci@nitehawk ~ $ dot records.gv -T pdf > records.pdf
Warning: Illegal attribute ID in <TD> - ignored
Warning: Illegal attribute ID in <TD> - ignored
Warning: Illegal attribute ID in <TD> - ignored
in label of node a
Warning: Illegal attribute ID in <TD> - ignored
Warning: Illegal attribute ID in <TD> - ignored
Warning: Illegal attribute ID in <TD> - ignored
in label of node b
Warning: node a, port first unrecognized
Warning: node b, port first unrecognized
  1. 根据documentation,TD的ID属性应该是合法的。我错过了什么?
  2. 如何引用单个单元格并在它们之间创建边缘?

2 个答案:

答案 0 :(得分:8)

您只需使用PORT代替ID,然后使用边缘定义,如示例所示。

<TD PORT="first" BGCOLOR="gray">first</TD>

ID的目的是下游使用,所以除非您使用SVG输出并在其他地方重用id,否则它们可能并不真正有用。

关于警告,我没有使用graphviz 2.28。如果您使用旧版本的graphviz,我建议您更新。

graphviz html label ports

答案 1 :(得分:8)

为了完整起见,这里是实际工作的完整来源:

digraph G {
    node [shape=plaintext]

    a [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
                           <TR><TD PORT="c" BGCOLOR="gray">first</TD></TR>
                           <TR><TD PORT="d">second</TD></TR>
                           <TR><TD PORT="e">third</TD></TR>
              </TABLE>>];

    b [label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
                           <TR><TD PORT="c" BGCOLOR="gray">first</TD></TR>
                           <TR><TD PORT="d">second</TD></TR>
                           <TR><TD PORT="e">third</TD></TR>
              </TABLE>>];

    a:c -> b:c;
}