Как не допустить, чтобы ребра в графвизе перекрывали друг друга - PullRequest
50 голосов
/ 19 октября 2010

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

Как сделать так, чтобы края не перекрывали друг друга?Попросите их пересечь друг друга, все в порядке.

Ответы [ 3 ]

31 голосов
/ 12 января 2011

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

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

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

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

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

overlap = scale;

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

overlap = false;
splines = true;

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

8 голосов
/ 06 января 2015

Даже для довольно тривиального графика я вижу 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
...