Почему Graphviz/Dot так странно работает с этим конкретным кодом?

Я использую GraphViz 2.28 (текущая стабильная версия) в Windows 7, и Graphviz/Dot дает сбой из-за следующий код.

digraph G {
ranksep = 1.0; size = "10,10";
{
    node [shape = plaintext, fontsize = 20];
    GAWM1 -> GAWM2 -> 0;
}

node [shape = box];
{rank = same;0;wx1;wx2;rx1;}

wx1 -> wx2;
wx2 -> rx1;
wx1 -> rx1[color = blue];

subgraph struct
{
    node [shape = record];
    rx11 [shape = record, label = "rx1 | [x=[wx2]]"];
}
{rank = same; GAWM1; "rx11";}

// W'WR Order:
wx2 -> wx1[style = dashed, color = red, label = "1"]; }

Все становится странно, когда я провожу некоторые эксперименты на этом примере:

  1. Хорошо работает, когда только последний оператор "wx2 -> wx1[style = dashed, color = red, label = "1"];" устранен;
  2. Это хорошо работает, когда удаляется только восьмая строка "{rank = same;0;wx1;wx2;rx1;}";
  3. Это также хорошо работает, когда удаляется только метка (то есть ", label = "1"") в последнем выражении.

Я сообщил о проблеме в системе отслеживания проблем Graphviz, но пока не получил ответа. Не могли бы вы помочь выяснить причину?

Спасибо.


person hengxin    schedule 10.01.2013    source источник
comment
Я попробовал ваш скрипт и столкнулся с крахом dot.exe и gvedit.exe. Circo.exe и Neato.exe работают нормально на этом образце.   -  person Axel Kemper    schedule 14.01.2013
comment
@AxelKemper Спасибо за отзыв. Однако заявления о Circo и Neato на сайте Graphviz для меня не имеют смысла. Не могли бы вы объяснить, что мне делать, если я хочу использовать Circo или Neato? Спасибо еще раз.   -  person hengxin    schedule 14.01.2013
comment
Graphviz предлагает несколько связанных, но разных механизмов компоновки. Circo — мой фаворит, когда узлы графа могут быть красиво отображены в виде кругов. См. graphviz.org. В вашем примере есть подграф. Поэтому вы, вероятно, привязаны к dot.exe («иерархические» или многоуровневые рисунки ориентированных графов. Это инструмент по умолчанию, который следует использовать, если ребра имеют направленность).   -  person Axel Kemper    schedule 14.01.2013


Ответы (1)


Следующий вариант вашего скрипта не дает сбой:

digraph G {
ranksep = 1.0; size = "10,10";
{
    node [shape = plaintext, fontsize = 20];
    GAWM1 -> GAWM2 -> 0;
}
node [shape = box];
{rank = same;0;wx1;wx2;rx1;}
wx1 -> wx2;
wx2 -> rx1;
wx1 -> rx1[color = blue];
subgraph struct
{
    node [shape = record];
    rx11 [shape = record, label = "rx1 | [x=[wx2]]"];
}
{rank = same; GAWM1; "rx11";}
// W'WR Order:
//wx2 -> wx1[style = dashed, color = red, label = "1"]; 
wx2 -> wx1 [style=dashed, color=red];
}

Похоже на ошибку с label короткого ребра между wx1 и wx2.

person Axel Kemper    schedule 14.01.2013
comment
Да, я проводил такие эксперименты и упомянул их в своей задаче. Однако я хочу сохранить метку, указывающую на что-то важное в моей ситуации. Любые другие предложения? Спасибо. (Я попробую Circo и Neato.) - person hengxin; 15.01.2013