强制GraphViz将子图一个接一个地对齐

强制GraphViz将子图一个接一个地对齐,graphviz,subgraph,Graphviz,Subgraph,我有一个包含3个子图的图,它们一个挨着另一个放置,我希望它们一个叠在另一个上面(我不希望子图内容的方向改变) 简单的例子是: 有向图G{ rankdir=TB; 子图簇{ 子图簇{ “A1”、“A2”、“A3” “A1”->“A2” “A1”->“A3” } 子图簇概念1{ “B1”、“B2”、“B3” “B1”->“B2” “B1”->“B3” } } 子图簇{ “C1”、“C2”、“C3” “C1”->“C2” “C1”->“C3” } }您需要连接集群(或者更准确地说,连接集群内的节点)

我有一个包含3个子图的图,它们一个挨着另一个放置,我希望它们一个叠在另一个上面(我不希望子图内容的方向改变)

简单的例子是:

有向图G{
rankdir=TB;
子图簇{
子图簇{
“A1”、“A2”、“A3”
“A1”->“A2”
“A1”->“A3”
}
子图簇概念1{
“B1”、“B2”、“B3”
“B1”->“B2”
“B1”->“B3”
}
}
子图簇{
“C1”、“C2”、“C3”
“C1”->“C2”
“C1”->“C3”
}

}
您需要连接集群(或者更准确地说,连接集群内的节点),以使您的
rankdir=TB
有效。可以通过使用不可见边执行此操作:

digraph G 
{
    rankdir=TB;    
    subgraph cluster_lkg
    {
        subgraph cluster_sentence_1
        {
            "A1","A2","A3"
            "A1" -> "A2"
            "A1" -> "A3"
        }
        subgraph cluster_concepts_1{
            "B1","B2","B3"
            "B1" -> "B2"
            "B1" -> "B3"
        }
        //A1 -> B1;
    }
    subgraph cluster_fkgs
    {
            "C1","C2","C3"
            "C1" -> "C2"
            "C1" -> "C3"
    }
    edge[ style = invis ];
    { A2 A3 } -> B1;
    { B2 B3 } -> C1;
}
产生

节点
C1
未对齐-我猜这是由于嵌套集群造成的,但我没有反对它的方法。希望它能有所帮助