graphviz html表节点居中而不是相同的排名

时间:2015-03-03 23:21:56

标签: html graphviz dot

在此示例图中,我希望两个节点(源中的A和B)从相同的y位置开始。特别是,我希望蓝色标题和红色标题处于相同的排名,或者y位置 - 理想情况下尽可能接近图像框的顶部,而不是目前的行为引起。

bad graph

换句话说,我希望红色标题正好在蓝色标题的位置,就其y位置而言,但就目前而言,似乎所有使用html标签的新节点都显示为相对于最大的html标签节点。

这是另一张图片来说明我的意思:

good graph

理想情况下,随着更多节点添加了类似的html标签结构,它们从左向右移动,并从与所有其他节点/标题相同的y位置开始。

不幸的是,我尝试了rank的许多变体,但我似乎无法使用排名(或其他任何东西)来做这件事。

记录不是可接受的解决方案;我生成的图表中的行数非常大,行数> 400似乎无法通过解析错误为我生成。

请提供一个解决方案,根据以下graphviz源(用于生成带dot -O -Tpng <filename.gv>的错误图像)生成与良好图形示例图像(第2张图像)非常相似的内容:

digraph example {

node [shape=plaintext]
rankdir=TB

A [label=<
  <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
   <TR>
    <TD BGCOLOR="lightblue">HEADER</TD>
   </TR>
   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>

   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>

   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>

   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>


   <TR>
    <TD ALIGN="LEFT">TEST</TD>
   </TR>

  </TABLE>
>];

B [
label=<
  <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
   <TR PORT="header">
    <TD BGCOLOR="#d23939" COLSPAN="2">HEADER</TD>
   </TR>
   <TR>
    <TD BGCOLOR="#ff6363">ONE</TD><TD BGCOLOR="#ff6363">TWO</TD>
   </TR>
   <TR>
    <TD PORT="1">1</TD><TD>2</TD>
   </TR>
   <TR>
    <TD PORT="3">3</TD><TD>4</TD>
   </TR>
  </TABLE>
>];

}

1 个答案:

答案 0 :(得分:1)

这是rankdir=LR的典型示例。辅助节点和边缘是不可见的

digraph example {
    rankdir=LR
    node [shape=plaintext]

    0, 1, 2, 3 [style=invis]
    0->1->2->3 [style=invis]
    { rank=same; 0->A [style=invis]}
    { rank=same; 1->B [style=invis]}

    A [label=<
      <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
       <TR>
        <TD BGCOLOR="lightblue">HEADER</TD>
       </TR>
       <TR>
        <TD ALIGN="LEFT">TEST</TD>
       </TR>
       <TR>
        <TD ALIGN="LEFT">TEST</TD>
       </TR>
       <TR>
        <TD ALIGN="LEFT">TEST</TD>
       </TR>
       <TR>
        <TD ALIGN="LEFT">TEST</TD>
       </TR>
       <TR>
        <TD ALIGN="LEFT">TEST</TD>
       </TR>
       <TR>
        <TD ALIGN="LEFT">TEST</TD>
       </TR>
       <TR>
        <TD ALIGN="LEFT">TEST</TD>
       </TR>
      </TABLE>
    >];

    B [label=<
      <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
       <TR PORT="header">
        <TD BGCOLOR="#d23939" COLSPAN="2">HEADER</TD>
       </TR>
       <TR>
        <TD BGCOLOR="#ff6363">ONE</TD><TD BGCOLOR="#ff6363">TWO</TD>
       </TR>
       <TR>
        <TD PORT="1">1</TD><TD>2</TD>
       </TR>
       <TR>
        <TD PORT="3">3</TD><TD>4</TD>
       </TR>
      </TABLE>
    >];
}

tables aligned