GraphViz - выравнивание подграфа

Я хочу нарисовать такую ​​схему. желаемый

Но единственная диаграмма, которую я могу нарисовать, это: current

Код, который я использовал:

graph [rankdir = LR]

node [shape=box]

x1;x2;x3;y1;y2;y3;y4;y5;y6;y7;y8;

node [shape=oval]

ind60;dem60;dem65

{x1,x2,x3} -> ind60[arrowhead=none arrowtail=normal dir=both]

{y1,y2,y3,y4} -> dem60[arrowhead=none arrowtail=normal dir=both]

dem65 -> {y5,y6,y7,y8}

ind60->dem60  dem60->dem65  ind60->dem65

Как нарисовать нужный сюжет?


person Keon-Woong Moon    schedule 25.04.2017    source источник


Ответы (1)


Первый шаг к тому, чего вы хотите достичь, используя rank=same, невидимые края, группы и constraint=false:

digraph {

node [shape=box]
{
    rank=same;
    y1;y2;y3;y4;
}

dem60[shape=oval];
{y1;y2;y3;y4} -> dem60 [dir=back];

{
    rank=same;
    x2 [group=left];
    ind60[shape=oval];
    dem65[shape=oval];
    y6 [group=right];

    x2 -> ind60 [dir=back];
    ind60 -> dem65
    dem65 -> y6;
}

// Invisible edges to order vertically node groups
edge[style=invis];
x1[group=left];
x3[group=left];
x1 -> x2 -> x3;
node[group=right];
y5 -> y6 -> y7 -> y8;

node[group=""]
edge[style=solid]
ind60->dem60
dem60->dem65

edge[constraint=false];
ind60 -> x1;
ind60 -> x3;
dem65 -> y5;
dem65 -> y7;
dem65 -> y8;
}
  • group обеспечивает вертикальное выравнивание узлов (одной и той же группы).
  • rank=same заставляет узлы оставаться на том же ранге.
  • Невидимые ребра обеспечивают порядок ранжирования внутри вертикальной группы.
  • constraint=false удаляет расчет ограничений для некоторых ребер.
  • dir=back меняет отображаемое направление края на противоположное.
person marapet    schedule 25.04.2017