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

Sté*_*hon 0 dot graphviz subgraph

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

digraph
{
    a;

    subgraph cluster_mysubgraph
    {
        a->b;       
    }
}
Run Code Online (Sandbox Code Playgroud)

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

a 不应该在 b 子图中

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

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

digraph
{
    subgraph cluster_pseudo
    {
        a;
    }

    subgraph cluster_mysubgraph
    {
        a->b;       
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以防止a出现在 内部mysubgraph,但另一个子图并不是真正的选择。

解决方法在自己的子图中放置一个,不好

a实际上应该在任何子图之外。

问题

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

Sté*_*hon 6

它看起来像下面的作品:

digraph
{
    a;


    subgraph cluster_mysubgraph
    {
        b;
    }

    a->b;

}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

因此,可能存在一些规则,例如:“在子图中声明节点,注意在子图中声明边,因为这往往会使节点附加到该子图(除非它们已经附加到另一个子图)”。

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