graphviz - tipos - subgrafos matematicas discretas
¿Cómo controlar el diseño de subgrafos en punto? (1)
Tengo un digraph
compuesto de muchos subgraphs
independientes y simples de varios tamaños. dot
coloca todos estos subgrafos horizontalmente, por lo que termino con un archivo de salida de 40000x200, por ejemplo:
G1 G2 G3 G.....4 G5
¿Cómo le dot
a dot
que diseñe estos subgrafos en ambas dimensiones para obtener algo como:
G1 G2 G3
G.....4
G5
Gracias.
Los pasos para lograr esto utilizan múltiples herramientas de graphviz que pueden ser canalizadas juntas.
La siguiente línea es una configuración posible, graph.dot es el archivo que contiene su (s) gráfico (s). Puede que tenga que jugar con las opciones.
ccomps -x graph.dot | dot | gvpack -array3 | neato -Tpng -n2 -o graph.png
Y aquí está la explicación:
1. Separar los gráficos desconectados.
Herramienta: ccomps
descompone los gráficos en sus componentes conectados
La opción -x
( solo se imprimen los componentes conectados, como gráficos separados ) es probablemente todo lo que se necesita.
2. Diseña cada gráfica
Herramienta: punto
Cada gráfico dirigido se presenta, uno por uno. Este paso es necesario para obtener la posición de los nodos y bordes.
3. Empaque todos los gráficos trazados en uno
Herramienta: gvpack
lee en una secuencia de gráficos, combina los gráficos en un solo diseño y produce un único gráfico que sirve como la unión de los gráficos de entrada.
Debes leer la documentación de las opciones para esta herramienta y jugar con las opciones. Por ejemplo, -array
se utiliza para diseñar los gráficos en forma de cuadrícula, y ofrece varias banderas para controlar el diseño.
4. Crea la salida
Herramienta: neato
La opción -n2
le dice a neato que no -n2
los gráficos de entrada sino que use los atributos de posición existentes.
Ejemplo gráfico:
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;
}
}
Edición: Ordenar los dígrafos en gvpack
Para determinar el orden de aparición de los subgrafos en el diseño combinado creado por gvpack
, cada subgrafo necesitará un atributo sortv
.
Por ejemplo, los siguientes gráficos:
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;
}
puede ser transformado usando
dot graph.dot | gvpack -array_u | neato -Tpng -n2 -o graph.png
Resultando en