Как повлиять на расположение элементов графика?

Я пытаюсь визуализировать простой граф конечного автомата, используя Graphviz. Макет, созданный Graphviz, мне не совсем нравится. Я ожидал более компактного результата с более короткими краями.

До сих пор я пытался использовать группы и изменять веса ребер, но не очень удачно. Мне непонятно, почему Graphviz рисует график именно так и как настроить его алгоритм под себя. Есть ли какие-либо параметры, которые я могу установить для достижения этого? Или мне следует использовать другую команду, кроме dot? Я попробовал neato, но результат выглядел совершенно испорченным, и я снова не очень понимаю, что делаю...

Это мой лучший результат на данный момент:

Finite State Machine, best result so far

Пытаясь визуализировать лучший макет -, чем этот, я думаю, что график выглядел бы лучше, если бы красные прямоугольники были выровнены по-другому, например, более компактно, как показано стрелками на этом рисунке :

Finite State Machine, imagined better result

. Я использовал dotдля создания графика, и исходный код выглядит следующим образом:

  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 }

Кроме того, кто-нибудь, пожалуйста, дайте мне знать, если я делаю какие-либо странные вещи в файле Graphviz выше --, любая обратная связь приветствуется.


Обновление:

Дальнейшие эксперименты и пробы некоторых предложений, таких как порты, данные пользователем marapet, еще больше запутали меня... Например, на картинке ниже, почему dotрешил нарисовать эти странные обходные пути для Working->Failedи Failed->Announced, как в отличие от более прямых линий?

Graph with strange long edges

16
задан Reinier Torenbeek 24 July 2012 в 03:35
поделиться