mac - Evitando que graphviz reorganice los nodos
graphviz tutorial (4)
Estoy tratando de visualizar una estructura de árbol usando graphviz, el problema es que a medida que la gráfica aumenta, graphviz comienza a reorganizar el orden de los nodos. Di que tengo lo siguiente,
A
/ | /
B C D
se vuelve,
A
/ | /
B D C
Probablemente haga esto para ahorrar espacio, pero en el orden de contexto de los nodos importa, he intentado agregar,
graph [ordering="out"];
pero no cambió la salida.
EDITAR:
digraph bt {
graph [ordering="out"];
node [style="rounded", shape=box]
N_2386 -> N_2387
N_2387 -> N_2388
N_2388 -> N_2389
N_2388 -> N_2390
N_2387 -> N_2391
N_2386 -> N_2392
subgraph cluster_2393 {
labeljust = "l";
style=dashed;color="#B0B0B0"
N_2392 -> N_2394
N_2394 -> N_2395
N_2395 -> N_2396
N_2396 -> N_2397
N_2397 -> N_2398
N_2397 -> N_2399
N_2396 -> N_2400
N_2400 -> N_2401
N_2400 -> N_2402
N_2395 -> N_2403
N_2403 -> N_2404
N_2404 -> N_2405
N_2405 -> N_2406
N_2403 -> N_2407
N_2407 -> N_2408
N_2408 -> N_2409
N_2409 -> N_2410
N_2410 -> N_2411
N_2411 -> N_2412
N_2412 -> N_2413
N_2412 -> N_2414
N_2412 -> N_2415
N_2411 -> N_2416
N_2416 -> N_2417
N_2416 -> N_2418
N_2416 -> N_2419
N_2408 -> N_2420
N_2408 -> N_2421
N_2403 -> N_2422
N_2395 -> N_2423
N_2392 -> N_2424
}
}
gráfico en cuestión Lo que necesito es, N_2387 debería estar a la derecha N_2392 debería estar a la izquierda. Cual es el orden en que los inserto.
Graphviz está diseñado para generar gráficos con apariencia agradable. Intentar forzar el diseño derrota gran parte del valor de la herramienta.
Como se señaló, los bordes invisibles se pueden usar para imponer cierta disposición, y el orden lexicográfico (los nodos anteriores tienden a colocarse más a la izquierda) también puede indicar una preferencia.
En general, agregar más restricciones a un diseño produce diseños perversos que son increíblemente difíciles de solucionar.
Alguna desviación de un diseño esperado no debería ser causa para intentar forzar el resultado. Menos restricciones hacen que los gráficos generados sigan teniendo buena apariencia a medida que cambian con el tiempo, incluso si pueden cambiar radicalmente en apariencia.
Probé lo siguiente
digraph g {
ordering=out ;
node [shape=box] ;
a -> b ; a -> c ; a -> d ; a -> e ; a -> f ;
a -> g ; a -> h ; a -> i ; a -> j ; a -> k ;
a -> l ; a -> m ; a -> n ; a -> o ; a -> p ;
a -> q ; a -> r ; a -> s ; a -> t ; a -> u ;
a -> v ; a -> w ; a -> x ; a -> y ; a -> z ;
}
y todos los nodos b
- z
están en el mismo nivel en el orden correcto. Qué versión estás usando?
Si cambia la primera rama a un subgrafo, los dos subgrafos se ordenarán como están escritos en el archivo.
Parece que el subgrafo como una prioridad más alta como un nodo normal y, por lo tanto, la ordering=out
parece cumplirse.
Esto funciona:
digraph bt {
graph [ordering="out"];
node [style="rounded", shape=box]
N_2386 -> N_2387
subgraph cluster_first {
N_2387 -> N_2388
N_2388 -> N_2389
N_2388 -> N_2390
N_2387 -> N_2391
}
N_2386 -> N_2392
subgraph cluster_2393 {
labeljust = "l";
style=dashed;color="#B0B0B0"
N_2392 -> N_2394
N_2394 -> N_2395
N_2395 -> N_2396
N_2396 -> N_2397
N_2397 -> N_2398
N_2397 -> N_2399
N_2396 -> N_2400
N_2400 -> N_2401
N_2400 -> N_2402
N_2395 -> N_2403
N_2403 -> N_2404
N_2404 -> N_2405
N_2405 -> N_2406
N_2403 -> N_2407
N_2407 -> N_2408
N_2408 -> N_2409
N_2409 -> N_2410
N_2410 -> N_2411
N_2411 -> N_2412
N_2412 -> N_2413
N_2412 -> N_2414
N_2412 -> N_2415
N_2411 -> N_2416
N_2416 -> N_2417
N_2416 -> N_2418
N_2416 -> N_2419
N_2408 -> N_2420
N_2408 -> N_2421
N_2403 -> N_2422
N_2395 -> N_2423
N_2392 -> N_2424
}
}
Si desea controlar el orden de artículos específicos, use un borde invisible entre ellos. Combinar esto con la directiva de rango le da mucho control.
Por ejemplo: aquí hay un ejemplo de diseño de tagcloud de Graphviz:
/*
Using a graph and relationships just to push things onto different lines.
Two layout rules:
1) all items on a given line go into a "rank=same" phrase
2) a relationship is needed between the first word on each line and the next line down to
force the vertical alignment.
*/
digraph {
edge[style=invisible]
node[shape=none]
fred [fontsize=18]
harry [fontsize=8]
jack [fontsize=12]
sally [fontsize=12]
mika
amy
jan
jack -> fred
fred -> mika
{rank=same;fred;harry}
{rank=same;mika amy; jan}
}