Используйте Graphviz, чтобы показать две таблицы рядом друг с другом с линиями между ячейками - PullRequest
0 голосов
/ 25 ноября 2018

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

enter image description here

Текущий код дляу меня есть графвиз это:

digraph G  {

   node [shape=record, fontname="Arial"];

   set1 [label = "{Blue Crosses | B1 | B2 | B3 | B4 }|{ Square |<b1>  Left |<b2> Left |<b3> Right | Left }"];
   set2 [label = "{Blue Crosses |<b1> B1 |<b2> B2 |<b3> B3 }|{ Coordinates | (1, 1) | (2, 2) | (4, 2) }"];

  set1:b1 -> set2:b1;
  set1:b2 -> set2:b2;
  set1:b3 -> set2:b3;

}

1 Ответ

0 голосов
/ 25 ноября 2018

Чтобы достичь того, что вы хотите, вам нужно добавить строку

{ rank = same; set1 set2 }

в ваш код после того, как вы создали узлы.Однако в этой ситуации вы обнаружите, что graphviz запутывается и больше не распознает порты.Поэтому вместо использования record = shape вам нужно будет перекодировать ваш график с HTML-подобными метками .Я сделал это для предоставленного примера (кстати, спасибо за ясный вопрос с кодом и желаемым результатом):

digraph G  
{
   node[ shape = none, fontname = "Arial" ];

    set1[ label=<
    <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
        <TR>
            <TD>Blue Crosses</TD>
            <TD>Square</TD>
        </TR>
        <TR>
            <TD>B1</TD>
            <TD PORT="b1">Left</TD>
        </TR>
        <TR>
            <TD>B2</TD>
            <TD PORT="b2">Left</TD>
        </TR>
        <TR>
            <TD>Right</TD>
            <TD PORT="b3">Right</TD>
        </TR>
        <TR>
            <TD>B4</TD>
            <TD>Left</TD>
        </TR>
    </TABLE>>];

    set2[ label=<
    <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
        <TR>
            <TD>Blue Crosses</TD>
            <TD>Coordinates</TD>
        </TR>
        <TR>
            <TD PORT="b1">B1</TD>
            <TD>(1, 1)</TD>
        </TR>
        <TR>
            <TD PORT="b2">B2</TD>
            <TD>(2, 2)</TD>
        </TR>
        <TR>
            <TD PORT="b3">B3</TD>
            <TD>(4, 2)</TD>
        </TR>
    </TABLE>>];    

    # layout
    nodesep = 2;                /* increase distance between nodes */
    { rank = same; set1 set2 }

    set1:b1 -> set2:b1;
    set1:b2 -> set2:b2;
    set1:b3 -> set2:b3;
}

дает

enter image description here

...