2012-02-06 21 views
13

Estoy tratando de visualizar una estructura de árbol usando graphviz, el problema es que a medida que el gráfico se hace más grande graphviz comienza a reorganizar el orden de los nodos. Decir que tengo la siguiente,Evitando que Graphviz reordene los nodos

A 
/| \ 
B C D 

se convierte,

A 
/| \ 
B D C 

probablemente lo hace para ahorrar espacio, pero en mi pedido contexto de los nodos de la materia He intentado añadir,

graph [ordering="out"]; 

pero no cambió la salida.

EDIT:

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 debe estar en el N_2392 derecha debe estar a la izquierda. Cual es el orden en que los inserto

+1

¿Alguna vez resolvió este problema por casualidad? Estoy teniendo el mismo problema, lamentablemente. – tantrev

Respuesta

5

He intentado 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?

+0

He actualizado a lo último sucede Lo que he agregado a la pregunta es el gráfico en cuestión. –

1

Si cambia la primera rama a un subgrafo, los dos subgrafos se ordenarán tal como están escritos en el archivo.

Parece que el subgráfico tiene una precedencia mayor que un nodo normal y, por lo tanto, el ordering=out parece que no se respeta.

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

El problema es que estoy programación generar estos gráficos no sé de antemano lo que se verá así. –

2

Si desea controlar el orden de las partidas específicas utilizan un borde invisible entre ellos. Si combina esto con la directiva , rango, tendrá mucho control.

por ejemplo: He aquí una muestra tagcloud diseño 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} 
} 
0

Graphviz está diseñado para generar gráficos con aspecto agradable. Intentar forzar el diseño derrota gran parte del valor de la herramienta.

Como se indicó, los bordes invisibles se pueden usar para aplicar algún diseño, 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.

Algunas desviaciones de un diseño esperado no deberían ser causa automática para tratar de forzar el resultado. Menos restricciones hacen que las gráficas generadas permanezcan atractivas ya que cambian con el tiempo, incluso si pueden cambiar radicalmente en apariencia.

Cuestiones relacionadas