Graphviz在子图中渲染节点,为什么?

时间:2014-06-11 17:12:18

标签: graphviz dot subgraph

我想显示指向节点a的节点bb位于子图中。 以下dot graphviz代码应该可以工作。

digraph
{
    a;

    subgraph cluster_mysubgraph
    {
        a->b;       
    }
}

唉,虽然节点a在任何子图之外声明,但它在mysubgraph内呈现(在Ubuntu 14.04上的graphviz 2.36.0上观察):

a should not be in b subgraph

我尝试过预先声明b之类的变体。没有成功。

解决方法是在另一个群集子图中声明a

digraph
{
    subgraph cluster_pseudo
    {
        a;
    }

    subgraph cluster_mysubgraph
    {
        a->b;       
    }
}

这可以防止a出现在mysubgraph内,但另一个子图实际上不是一个选项。

workaround puts a in own subgraph, not good

a应该在任何子图之外。

问题

  • 它应该是这样吗?
  • 是否有保留预期外观的解决方法?

1 个答案:

答案 0 :(得分:3)

看起来如下工作:

digraph
{
    a;


    subgraph cluster_mysubgraph
    {
        b;
    }

    a->b;

}

enter image description here

所以,可能会有一些规则,如:“在子图中声明节点,要小心在子图中声明边缘,因为这会使节点附加到该子图(除非它们已经附加到另一个子图上)”。

可能是这样,但是当生成点文件时,更容易在一次传递中生成节点和边缘,在我的情况下,在同一子图中声明节点和边缘。