嵌套有向子图

Nested directed subgraphs

我正在尝试在 graphviz 中获取嵌套子图。

Graphviz 版本为 2.38.0 (20140413.2041)

代码如下:

digraph G {
        subgraph cluster_win {
                style=filled;
                color=lightgrey;
                label = "Windows"

                subgraph extra_enabled {
                    fillcolor = "#EDF1F2"; 
                    color = "#028d35";
                    label="Subdirectory extra included";

                    node [style=filled,color=white];
                    config_debug1 [label = "Configure Debug"];
                    config_release1 [label = "Configure Release"];
                    build_debug1 [label = "Build"];
                    build_release1 [label = "Build"];

                    config_debug1 -> build_debug1;
                    config_release1 -> build_release1;

                    shape=rect;
                    style=rounded; 
                }

                subgraph extra_disabled {
                    label = "Subdirectory extra excluded";

                    config_debug2 [label = "Configure Debug"];
                    config_release2 [label = "Configure Release"];
                    build_debug2 [label = "Build"];
                    build_release2 [label = "Build"];
                    config_debug2 -> build_debug2;
                    config_release2 -> build_release2;
                }

                checkout [style=filled, color=white];
                checkout -> extra_enabled;
                checkout -> extra_disabled;
        }

        start -> checkout;

        start [label="git push"; shape=Mdiamond];
}

这就是结果。

Graphviz绘制了两个普通节点"extra_enabled"和"extra_disabled"。但是,我希望它们是子图,包含节点 "Configure Release"、"Configure Debug"、"Build" 和另一个 "Build".

我该如何解决?

你需要做两件事:

  • 仅连接节点,不能连接到集群
  • 集群名称需要以cluster_
  • 为前缀

将此应用于您的代码

digraph G {
        subgraph cluster_win {
                style=filled;
                color=lightgrey;
                label = "Windows                  "

                subgraph cluster_extra_enabled {
                    fillcolor = "#EDF1F2"; 
                    color = "#028d35";
                    label="Subdirectory extra included";

                    node [style=filled,color=white];
                    config_debug1 [label = "Configure Debug"];
                    config_release1 [label = "Configure Release"];
                    build_debug1 [label = "Build"];
                    build_release1 [label = "Build"];

                    config_debug1 -> build_debug1;
                    config_release1 -> build_release1;

                    shape=rect;
                    style=rounded; 
                }

                subgraph cluster_extra_disabled {
                    label = "Subdirectory extra excluded";

                    config_debug2 [label = "Configure Debug"];
                    config_release2 [label = "Configure Release"];
                    build_debug2 [label = "Build"];
                    build_release2 [label = "Build"];
                    config_debug2 -> build_debug2;
                    config_release2 -> build_release2;
                }

                checkout [style=filled, color=white];
                checkout -> config_debug1;
                checkout -> config_release2;
        }

        start -> checkout;

        start [label="git push"; shape=Mdiamond];
}

我明白了

这可能接近您想要的。请注意,我在标签 "Windows " 中添加了一些空格以使其远离箭头。您也可以使用 labeljust。还有一些方法可以使边缘在集群的边界处结束,但我需要做更多的编辑,我不确定你是否想要它。