tutorial mac example layout graphviz graph-visualization

layout - mac - ¿Cómo hacer cumplir el orden de los nodos de izquierda a derecha en el diseño de rango de GraphViz?



graphviz python (1)

Estoy visualizando una colección de procesos con GraphViz. Cada proceso consiste en algunas operaciones de lectura o escritura en el orden del programa. Naturalmente, es deseable organizar las operaciones en el orden de izquierda a derecha con respecto a cada proceso.

Usando GraphViz (versión 2.28), mi código es así:

digraph G { ranksep = 1.0; size = "10,10"; { node [shape = plaintext, fontsize = 20]; 0 -> 1 -> 2 -> 3 -> 4; } node [shape = box]; {rank = same;0;wy1;rf1;rc1;rz1;ry1;ra1;rb1;rx2;} {rank = same;1;wf1;} {rank = same;2;wx2;wc1;} {rank = same;3;wf2;wz2;wx3;wa1;} {rank = same;4;wz1;wy2;wx5;wb1;} wy1 -> rf1; rf1 -> rc1; rc1 -> rz1; rz1 -> ry1; ry1 -> ra1; ra1 -> rb1; rb1 -> rx2; wx2 -> wc1; wf2 -> wz2; wz2 -> wx3; wx3 -> wa1; wz1 -> wy2; wy2 -> wx5; wx5 -> wb1; wf1 -> rf1[color = blue]; wc1 -> rc1[color = blue]; wz1 -> rz1[color = blue]; wy1 -> ry1[color = blue]; wa1 -> ra1[color = blue]; wb1 -> rb1[color = blue]; wx2 -> rx2[color = blue]; // W''WR Order: wx3 -> wx2[style = dashed, color = red]; // W''WR Order: wx5 -> wx2[style = dashed, color = red]; }

Lamento decir que no se me permite publicar la imagen de salida con una reputación demasiado baja. Si puede ejecutar el código, verá que el resultado no es tan satisfactorio debido a que está fuera de servicio en proceso con pid = 3. Específicamente, el algoritmo de diseño de GraphViz ha reorganizado el orden (ideal) "wf2-> wz2 -> wa1 -> wx3 "a" wx3, wf2, wz2, wa1 ". Por lo tanto, mi problema es:

Mi problema : ¿Cómo hacer cumplir el orden de los nodos de izquierda a derecha en el entorno de clasificación?

Con la exploración en este sitio, he encontrado algunos problemas similares y posibles soluciones. Sin embargo, simplemente no funcionaron en mi ejemplo específico:

  • Ordenamiento de nodos de Graphviz .dot : la opción de restricción = falsa empeoró mi imagen PDF. Revisé el manual del usuario del punto que dice:

    Durante la asignación de rango, el nodo principal de un borde está restringido para estar en un rango más alto que el nodo de cola. Sin embargo, si el límite tiene una restricción = falsa, este requisito no se aplica.

    Basado en las afirmaciones anteriores, (supongo) la opción de restricción = falsa tiene efecto entre diferentes rangos en lugar de en el mismo rango.

  • Graphviz --- orden aleatorio de nodo y bordes que pasan por las etiquetas : con sorpresa, la opción de restricción = falsa ayudó mucho a la "máquina de estado finito" en el mismo rango . Una vez más, no me salva de los problemas.

  • graphviz: diseño circular conservando el orden de los nodos : el gráfico del proceso es dinámico tanto en número de nodos como en bordes. Por lo tanto, tal vez no sea atractivo usar la posición absoluta para los nodos (¿para provocar un cruce de bordes?).

    Gracias por cualquier sugerencia. Y el código ejecutable será muy apreciado.


digraph G { ranksep = 1.0; size = "10,10"; { node [shape = plaintext, fontsize = 20]; 0 -> 1 -> 2 -> 3 -> 4; } node [shape = box]; { rank = same; 0->wy1->rf1->rc1->rz1->ry1->ra1->rb1->rx2 [color=white]; rankdir=LR; } { rank = same; 1->wf1[color=white]; rankdir=LR } { rank = same; 2->wx2->wc1[color=white]; rankdir=LR; } { rank = same; 3->wf2->wz2->wx3->wa1[color=white]; rankdir=LR; } { rank = same; 4->wz1->wy2->wx5->wb1[color=white]; rankdir=LR; } wy1 -> rf1; rf1 -> rc1; rc1 -> rz1; rz1 -> ry1; ry1 -> ra1; ra1 -> rb1; rb1 -> rx2; wx2 -> wc1; wf2 -> wz2; wz2 -> wx3; wx3 -> wa1; wz1 -> wy2; wy2 -> wx5; wx5 -> wb1; wf1 -> rf1[color = blue]; wc1 -> rc1[color = blue]; wz1 -> rz1[color = blue]; wy1 -> ry1[color = blue]; wa1 -> ra1[color = blue]; wb1 -> rb1[color = blue]; wx2 -> rx2[color = blue]; // W''WR Order: wx3 -> wx2[style = dashed, color = red]; // W''WR Order: wx5 -> wx2[style = dashed, color = red]; }

No estoy seguro de haber captado correctamente su problema, pero intente usar esto y comentarlo si es lo que desea. He agregado bordes invisibles para la clasificación correcta de los nodos y utilicé rankdir para usar el diseño de izquierda a derecha.