tutorial mac example graphviz

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} }