2015-03-03 3 views
1

В этом примере диаграммы я хотел бы, чтобы два узла (A и B в источнике) начинались в одной и той же позиции y. В частности, я хотел бы, чтобы синий заголовок и красный заголовок были в одном ранге или в позиции y --- идеально как можно ближе к верхней части кадра изображения, а не поведению, которое оно в настоящее время вызывает.graphviz html узлы таблицы, центрированные вместо одного ранга

bad graph

Другими словами, я хочу красный заголовок, чтобы быть именно там, где синий заголовок, с точки зрения его у позиции, но, как он стоит в настоящее время, похоже, все новые узлы, используя появляются HTML метки с центром по наибольшему узлу html-метки.

Вот еще одна картинка, чтобы проиллюстрировать, что я имею в виду:

good graph

В идеале, чем больше узлов добавляются с аналогичной структурой HTML этикетки, они движутся слева направо, и начать в то же у позиции как и все остальные узлы/заголовки.

К сожалению, я пробовал много вариантов rank, но я не могу это сделать, используя ранг (или что-то еще).

Записи не являются приемлемым решением; число строк чрезвычайно велико в графиках, которые я генерирую, и записи с строками> 400, похоже, не сгенерируют для меня с ошибкой синтаксического анализа.

Просьба предоставить решение, которое генерирует что-то очень похожее на хороший график, например, изображение (второе изображение), с точки зрения что-то вроде следующего Graphviz источника (используется для генерации плохое изображение с dot -O -Tpng <filename.gv>):

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

Это типичный пример для 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