Лучшее расположение узлов для блок-схем в точках - PullRequest
1 голос
/ 08 ноября 2011

После предыдущего вопроса ( Макет блок-схемы с точкой / Graphviz ) у меня есть дополнительные вопросы. Следующее скомпилировано так:

dot -Gsplines = none test.gv | neato -n -Gsplines = ortho -Tpng -otest.png

digraph G {
    graph [rankdir = LR];

    node[shape=record, style=filled];

bar[label="Bar", height=1.3636363636363635];
tea[label="Tea", height=1.3636363636363635];
brew[label="Brew", height=3.6363636363636362];
bar1[label="Bar1", height=2.2727272727272725];
baz[label="Baz", height=1];
foo[label="Foo", height=5.0];
darjeeling[label="Darjeeling", height=3.1818181818181817];
example[label="Example", height=17.727272727272727];

bar -> example [label="bar_clk"];
bar -> example [label="bar_bar"];
example -> tea [label="bli1"];
example -> tea [label="blo2"];
example -> tea [label="blo3"];
example -> brew [label="bli"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
example -> brew [label="blo"];
bar1 -> example [label="bar1_foo"];
bar1 -> example [label="bar1_bar"];
bar1 -> example [label="bar1_baz"];
bar1 -> example [label="bar1_baz1"];
bar1 -> example [label="bar1_bar2"];
baz -> example [label="baz_foo"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> foo [label="bla"];
example -> bar [label="blu"];
example -> baz [label="ble"];
darjeeling -> example [label="darjeeling_bli1"];
darjeeling -> example [label="darjeeling_blo2"];
darjeeling -> example [label="darjeeling_blo3"];
darjeeling -> example [label="darjeeling_bli1"];
darjeeling -> example [label="darjeeling_blo2"];
example -> darjeeling [label="bla"];
darjeeling -> example [label="darjeeling_blo3"];
}

Мой вопрос заключается в том, как я могу взять, скажем, узлы Баз и Дарджилинг и переместить их в левую сторону, чтобы уменьшить высоту среднего узла. Я не знаю, что определяет это. Я понимаю, что это направленный граф, поэтому общий «поток» диаграммы слева направо, я просто хотел бы больше контроля.

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

Спасибо!

1 Ответ

2 голосов
/ 08 ноября 2011

Пара моментов:

как я могу взять, скажем, узлы Баз и Дарджилинг и переместить их в левую сторону

Установив constraint=falseдля ребер, идущих от Пример до Баз и Дарджилинг , или путем группировки всех узлов, чтобы они появлялись слева от Пример в подграфе сrank=min.

Вы можете сказать, что это не подходящее решение (по крайней мере, не с constraint=false), потому что

Эти диаграммы будут сгенерированы автоматически

и я полностью понимаю (бывал там много раз) - но в то же время вы хотите

уменьшить высоту среднего узла

который установлен вручную , поэтому график все еще не полностью автоматически сгенерирован (как рассчитать высоту, необходимую для Пример ?).

Я не знаю, что определяет это

Я не совсем уверен ни то, ни другое - Баз может также бытьn слева.

Удивительно, но порядок появления узлов изменяет расположение в некоторых случаях.Например, если вы переместитесь вверх по определению узла Дарджилинга, он появится слева (и Bar окажется справа).


Редактировать : Вот фрагмент кода ...

Третья возможность - определить все ребра в порядке вправо (сверху вниз / влево-вправо) и украситькрая возвращаются с dir=back.

Если вы измените эти 3 строки

example -> bar [label="blu"];
example -> baz [label="ble"];
example -> darjeeling [label="bla"];

на

bar -> example [label="blu", dir=back];
baz -> example [label="ble", dir=back];
darjeeling -> example [label="bla", dir=back];

или на

example -> bar [label="blu", constraint=false];
example -> baz [label="ble", constraint=false];
example -> darjeeling [label="bla", constraint=false];

(и изменить высоту example)

Вы получите

graphviz result

...