Graphviz - 将集群(子图)直接连接到节点

Graphviz - Connect cluster (subgraph) directly to a node

我想将集群边缘连接到节点。请在下面找到一个简单的 Graphviz 代码。这是 online demo.

digraph G {
    compound=true;
    node1
    subgraph cluster0 {
        label="cluster"
        node2;
     }
    node2 -> node1 [ltail="cluster0"]
}

它产生这个输出:

因此,在上述方法中,cluster0 连接到 node1node2 在集群内。

要将集群本身连接到节点,我们需要 compound=true[ltail="cluster0"]。所以我们只是在幕后将 node2 连接到 node1 并从集群后面生成边缘。

node2 -> node1 [ltail="cluster0"]

我真正想要的是在代码中连接集群本身:

digraph G {
    compound=true;
    node1
    subgraph cluster0 {
        label="cluster"
        node2;
     }
    cluster0 -> node1 [ltail="cluster0"]
}

但不幸的是,它产生了这个:

好吧,第一个生成了所需的图像,但方法不正确。我正在使用状态机并以编程方式生成 Graphviz 代码。从逻辑上讲,状态图中只有一个转换:

cluster -> node1

但是要这样做,我们要从 node2 过渡到 node1,这在逻辑上是不正确的。我很好奇有一种方法可以实现这一点并将集群直接连接到节点而不是使用集群内部的节点。

提前致谢!

ltail 属性将它与集群边缘连接起来。

(看来你说的是对的,是后端连接节点,到了集群就覆盖了边缘。)

删除 ltail 属性应该可以修复它:

digraph G {
    compound=true;
    node1
    subgraph cluster0 {
        label="cluster"
        node2;
     }
node2 -> node1
    
}