Estoy tratando de visualizar un gráfico simple de máquina de estados finitos utilizando Graphviz. El diseño creado por Graphviz no es completamente de mi agrado. Esperaba un resultado más compacto con bordes más cortos.¿Cómo influir en el diseño de los elementos gráficos?
Hasta ahora, he intentado usar grupos y cambiar los pesos de los bordes, pero no mucha suerte. No me queda claro por qué Graphviz dibuja el gráfico de la forma en que lo hace y cómo ajustar su algoritmo a mi gusto. ¿Hay algún parámetro que pueda establecer para lograr eso? ¿O debería usar otro comando que no sea dot
? Probé neato
, pero el resultado se veía completamente en mal estado y otra vez, yo no entiendo muy bien lo que estoy haciendo ...
Ésta es mi mejor resultado hasta el momento:
tratando de visualizar una mejor lay-out que esto, creo que el gráfico se vería mejor si las cajas rojas se alinearon de manera diferente, más compacto, por ejemplo, como se indica por las flechas en esta imagen:
que utilizan dot
para crear el gráfico y código fuente es el siguiente:
1 digraph JobStateDiagram
2 {
3 rankdir=LR;
4 size="8,5";
5
6 node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.3, fontname="Arial"];
7 Created [fillcolor=black, shape=circle, label="", width=0.25];
8 Destroyed [fillcolor=black, shape=doublecircle, label="", width=0.3];
9 Empty [fillcolor="#a0ffa0"];
10 Announced [fillcolor="#a0ffa0"];
11 Assigned [fillcolor="#a0ffa0"];
12 Working [fillcolor="#a0ffa0"];
13 Ready [fillcolor="#a0ffa0"];
14 TimedOut [fillcolor="#ffa0a0"];
15 Failed [fillcolor="#ffa0a0"];
16
17 {
18 rank=source; Created Destroyed;
19 }
20
21 edge [style=bold, fontname="Arial" weight=2]
22 Empty -> Announced [ label="announce" ];
23 Announced -> Assigned [ label="assign" ];
24 Assigned -> Working [ label="start" ];
25 Working -> Ready [ label="finish" ];
26 Ready -> Empty [ label="revoke" ];
27
28 edge [fontname="Arial" color="#aaaaaa" weight=1]
29 Announced -> TimedOut [ label="timeout" ];
30 Assigned -> TimedOut [ label="timeout" ];
31 Working -> TimedOut [ label="timeout" ];
32 Working -> Failed [ label="error" ];
33 TimedOut -> Announced [ label="announce" ];
34 TimedOut -> Empty [ label="revoke" ];
35 Failed -> Announced [ label="announce" ];
36 Failed -> Empty [ label="revoke" ];
37
38 edge [style=bold, fontname="Arial" weight=1]
39 Created -> Empty [ label="initialize" ];
40 Empty -> Destroyed [ label="finalize" ];
41 Announced -> Empty [ label="revoke" ];
42 Assigned -> Empty [ label="revoke" ];
43 Working -> Empty [ label="revoke" ];
44 }
Además, alguien por favor hágamelo saber si hago cualquier cosas extrañas en el archivo de arriba Graphviz - cualquier comentario es apreciado.
Actualización:
Más experimentar y probar algunas sugerencias como puertos, dados por marapet usuario, han aumentado mi confusión ... Por ejemplo, en la imagen siguiente, ¿por qué dot
elegir para dibujar estos extraños desvíos para Working->Failed
y Failed->Announced
, a diferencia de las líneas más rectas?
Hay varias herramientas graphviz para el diseño dirigido (dot, twopi, circo, patchwork, osage) ver https://graphviz.gitlab.io/_pages/pdf/dot.1.pdf que valdría la pena intentar. – qneill