Как предотвратить появление краев в Graphviz для перекрытия друг друга
У меня есть график, который я создал в Graphviz, но проблема в том, что края перекрываются друг с другом (у меня есть 5-7 узлов в каждой строке), поэтому трудно сказать для каждого node, которые являются узлами он подключается.
Как заставить края не перекрывать друг друга? Пусть они пересекают друг друга в порядке.
Ответы
Ответ 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