Ответ 1
В целях достижения этого используются несколько инструментов графического отображения, которые могут быть соединены вместе.
Следующая строка представляет собой возможную конфигурацию, graph.dot является файлом, который содержит ваш график (ы). Возможно, вам придется играть с вариантами.
ccomps -x graph.dot | dot | gvpack -array3 | neato -Tpng -n2 -o graph.png
И вот объяснение:
1. Отдельные отключенные графики
Инструмент: ccomps
разлагает графики на свои компоненты связности
Опция -x
(только отдельные компоненты подключены, как отдельные графики), вероятно, все, что необходимо.
2. Макет каждого графика
Инструмент: точка
Каждый направленный граф выкладывается один за другим. Этот шаг необходим, чтобы получить положение узлов и ребер.
3. Упакуйте все выложенные графики в один
Инструмент: gvpack
читает в потоке графов, объединяет графики в один макет, и создает единый граф, служащий объединением входных графов.
Вы должны прочитать документацию по параметрам для этого инструмента и играть с параметрами. Например, -array
используется для выкладки графиков в виде сетки, а также предлагает несколько флагов для управления макетом.
4. Создайте вывод
Инструмент: neato
Опция -n2
указывает neato не размещать входные графики, а использовать существующие атрибуты позиции.
Пример графика:
digraph G {
subgraph G1 {
a->{b; c;};
}
subgraph G2 {
d -> {e; f;};
}
subgraph G3 {
g -> h;
}
subgraph G4 {
i -> j;
}
subgraph G5 {
{k; l;} -> m;
}
}
Изменить: Сортировка орграфов в gvpack
Чтобы определить порядок появления подграфов в объединенной компоновке, созданной gvpack
, каждому подграфу потребуется атрибут sortv
.
Например, следующие графики:
digraph G1 {
sortv=1;
a->{b; c;};
}
digraph G2 {
sortv=2;
d -> {e; f;};
}
digraph G3 {
sortv=3;
g -> h;
}
digraph G4 {
sortv=4;
i -> j;
}
digraph G5 {
sortv=5;
{k; l;} -> m;
}
можно преобразовать, используя
dot graph.dot | gvpack -array_u | neato -Tpng -n2 -o graph.png
в результате чего