Макет блок-схемы с dot / graphviz

Я бы хотел реализовать следующий макет с точкой:

mockup to be implemented in dot

На данный момент у меня есть вот что:

digraph G {
graph [rankdir = LR, splines=ortho]

  unit [shape=box, width = 2, height = 10];

  more_different_unit [shape=box, height=4];
  other_unit [shape=box, height=4];


  unit -> other_unit [label = "foo"];
  unit -> other_unit [label = "bar"];
  unit -> other_unit [label = "bar"];
  unit -> other_unit [label = "bar"];
  unit -> other_unit [label = "bar"];
  unit -> other_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
}

Я компилирую его так:

точка -Gsplines = none test .gv | neato -n -Gsplines = ortho -Tpng -otest.png

Это меня близко, но есть несколько вещей, которые я хотел бы знать.

  1. Как я могу расположить блоки слева и справа от Foo, а не только справа? Я еще не смог понять этого.

  2. Можно ли разместить метки краев последовательно над или под краем?

  3. Как я могу выровнять правые узлы по левому краю, а левые по правому краю? Один из возможных вариантов - сделать их одинаковой ширины, что было бы нормально.

Спасибо !!

ОБНОВЛЕНИЕ:

Основываясь на принятом ответе, я сейчас делаю то, что мне было нужно, опять же сгенерированное через dot piped to neato, как упоминалось выше:

digraph G {
    graph [rankdir = LR, splines=ortho];

    node[shape=record];
    Bar[label="Bar", height=2];
    Foo[label="Foo", height=4];

    Bew[label="Bew", height=2];
    Gate[label="Gate", height=2];

    Bar -> Foo [label="Bar2Foo"];
    Bar -> Foo [label="Bar2Foo"];
    Bar -> Foo [label="Bar2Foo"];

    Foo -> Bew [label="Foo2Bew"];
    Foo -> Bew [label="Foo2Bew"];
    Bew -> Foo [label="Bew2Foo"];


    Foo -> Gate [label="Foo2Gate"];
    Foo -> Gate [label="Foo2Gate"];
}
15
задан Christoph 28 October 2011 в 19:52
поделиться