Подтвердить что ты не робот

Как предотвратить появление краев в Graphviz для перекрытия друг друга

У меня есть график, который я создал в Graphviz, но проблема в том, что края перекрываются друг с другом (у меня есть 5-7 узлов в каждой строке), поэтому трудно сказать для каждого node, которые являются узлами он подключается.

Как заставить края не перекрывать друг друга? Пусть они пересекают друг друга в порядке.

4b9b3361

Ответ 1

Я предполагаю, что у вас есть ориентированный граф, который вы планируете с точкой.

Я не думаю, что есть волшебный переключатель, чтобы предотвратить перекрывающиеся края. Graphviz пытается сделать это из коробки.

Некоторые предложения, которые могут помочь, в зависимости от графика:

  • граничные концентраторы (концентрация = истина): объединить несколько ребер с общей конечной точкой в ​​отдельные ребра и частично параллельные ребра разделять части их пути.
  • порты. Края могут иметь свое начало и конечную точку на определенном порту (n, ne, e, se, s, sw, w, nw, w, c, _). В зависимости от граничных портов край меняет свою форму (сплайн).
  • невидимые узлы: могут быть случаи, когда введение невидимых узлов для маршрутизации ребер может иметь желаемый эффект.

Ответ 2

Другой подход заключается в добавлении свойства перекрытия в график. Допустимые свойства - это масштаб (который значительно увеличит размер вывода) или false (что не увеличит размер, но, скорее всего, приведет к перекрытию узлов).

overlap = scale;

Если вы используете overlap = false, вы можете избавиться от перекрытия границ с узлами, добавив атрибут splines=true:

overlap = false;
splines = true;

Это замедлит время генерации для больших графиков.

Ответ 3

Даже для довольно тривиального графа я вижу graphviz (neato, fdp) для генерации перекрытий. Например:

graph G {
0;
1;
2;
3;
0--1 ;
1--2 ;
2--3 ;
3--0 ;
}

Выдает крестик в моей версии кода 2.38.0. Из документации они рекомендуют пробовать разные случайные семена. Например, это сработало для меня:

neato -Gstart=5 file.dot -Tps -o file.ps