Próbuję wizualizować prosty wykres maszyny skończonego stanu za pomocą Graphviz. Układ stworzony przez Graphviz nie jest całkowicie zgodny z moimi upodobaniami. Spodziewałem się bardziej zwartego wyniku z krótszymi krawędziami.Jak wpływać na układ elementów wykresu?
Do tej pory próbowałem używać grup i zmieniać ciężary krawędzi, ale nie było to dużo szczęścia. Nie jest dla mnie jasne, dlaczego Graphviz rysuje wykres tak, jak robi i jak dostosować swój algorytm do moich potrzeb. Czy są jakieś parametry, które mogę ustawić, aby to osiągnąć? A może powinienem użyć innego polecenia niż dot
? Próbowałem neato
, ale wynik wyglądał całkowicie zawiedli i znowu, ja naprawdę nie rozumiem, co robię ...
To mój najlepszy wynik do tej pory:
Próba wizualizacji lepszy niż lay-out to, myślę, że wykres będzie wyglądał ładniej, jeśli czerwone budki były wyrównane inaczej, bardziej kompaktowy na przykład jak wskazano za pomocą strzałek na tym zdjęciu:
użyłem dot
stworzyć wykres i jego kod źródłowy jest w następujący sposób:
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 }
Również ktoś proszę dać mi znać, jeśli mam jakieś dziwne rzeczy w Graphviz złożyć powyżej - każda opinia jest mile widziana.
Aktualizacja:
Więcej eksperymentuje i próbuje jakieś sugestie jak porty, podanych przez marapet użytkownika, wzrosły moje zamieszanie ... Na przykład, na rysunku poniżej, dlaczego dot
wybrać wyciągnąć te dziwne objazdy dla Working->Failed
i Failed->Announced
, w przeciwieństwie do prostszych linii?
Istnieje kilka narzędzi grafvizujących układy ukierunkowane (dot, twopi, circo, patchwork, osage) patrz https://graphviz.gitlab.io/_pages/pdf/dot.1.pdf mogą być warte spróbowania. – qneill