Для достижения этой цели используются несколько графических инструментов , которые могут быть переданы вместе.
Следующая строка является возможной конфигурацией, 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
, в результате чего