Почему Graphviz отображает узлы в подграфе?

Я хочу показать узел a, указывающий на узел b. b находится в подграфе. Следующий код точечной графической визуализации должен работать.

digraph
{
    a;

    subgraph cluster_mysubgraph
    {
        a->b;       
    }
}

Увы, хотя узел a объявлен вне какого-либо подграфа, он отображается внутри mysubgraph (наблюдается на graphviz 2.36.0 в Ubuntu 14.04):

a не должно быть в подграфе b

Я пробовал такие варианты, как предварительное объявление b и тому подобное. Нет успеха.

Обходной путь — объявить a в другом подграфе кластера.

digraph
{
    subgraph cluster_pseudo
    {
        a;
    }

    subgraph cluster_mysubgraph
    {
        a->b;       
    }
}

Это предотвращает появление a внутри mysubgraph, но другой подграф на самом деле не вариант.

обходной путь помещает a в собственный подграф, что не очень хорошо

a действительно должен быть за пределами любого подграфа.

Вопросы

  • Это должно быть так?
  • Есть ли обходной путь, который сохраняет предполагаемый внешний вид?

person Stéphane Gourichon    schedule 11.06.2014    source источник


Ответы (1)


Так выглядят следующие работы:

digraph
{
    a;


    subgraph cluster_mysubgraph
    {
        b;
    }

    a->b;

}

введите здесь описание изображения

Таким образом, может быть какое-то правило, например: «объявить узлы в подграфе, остерегайтесь объявления ребер в подграфах, потому что это имеет тенденцию привязывать узлы к этому подграфу (если они уже не присоединены к другому)».

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

person Stéphane Gourichon    schedule 11.06.2014