如何在dot中布局多个子图到一个主图中?

12

我正在尝试使用 dot 创建一张图表。目前我已经创建了下面所示的图表,并提供了代码。

enter image description here

代码:

digraph top {
  node [shape=record ,penwidth = 2,fontsize=25];
  graph [labeljust=l]
  ratio="fill";

  subgraph cluster_1 {
    label = "Box 1";
    fontsize=40;
    subgraph cluster_2 {
      label = "Box 2";
      fontsize=38

      subgraph cluster_3 {
        label = "Box 3";
        fontsize=36;

        subgraph cluster_4 {
            label = "Box 4";
            fontsize=34;



            subgraph cluster_7 {
                    label = "Box 5";
                    fontsize=30;
                    color=blue;
                    style="dashed";
                    subgraph cluster8 {
                        color=red;
                        label = "Box 6";
                        subgraph cluster9 {
                            label = "Box 7";
                            subgraph cluster10 {
                                label = "Box 8";
                                l4 [label = "{  Label : X \l| \
                                             Label : 2014-12-05 \l| \
                                             Label : 2015-01-04 \l| \
                                             Label : true \l} \
                                            "];
                            }
                            subgraph cluster11 {
                                label = "Box 9";
                                l5 [label = "{  Label : X \l| \
                                             Label : 2015-03-06 \l| \
                                             Label : 2015-01-04 \l| \
                                             Label : true \l} \
                                            "];
                            }
                            subgraph cluster12 {
                                label = "Box 10";
                                l6 [label = "{  Label : X \l| \
                                             Label : 2015-07-03 \l| \
                                             Label : 2015-08-31 \l| \
                                             Label : true \l} \
                                            "];
                            }

                        }

                    }
                    subgraph cluster13 {
                        color=green;
                        label = "Box 11";
                        subgraph cluster {
                            label = "Box 12";
                            "Label : 2 days"
                        }
                    }
                    subgraph cluster14 {
                        label = "Box 13";
                        style=bold;
                        fontsize=20;
                        color=grey;
                        subgraph cluster15 {
                            label = "Box 14";
                            subgraph cluster16 {
                                label = "Box 15";
                                subgraph cluster17 {
                                    label = "if";
                                    subgraph cluster18 {
                                        label = "and";
                                        subgraph cluster19 {
                                            label = "Box 16";
                                            subgraph cluster20 {
                                                label = "Box 17";
                                                l7 [label = "{  Label : A \l| \
                                                                 Label : B \l| \
                                                                 Label : C \l| \
                                                                 Label : D \l} \
                                                                "];
                                            }
                                        }
                                        subgraph cluster21 {
                                            label = "Box 18";
                                            subgraph cluster {
                                                label = "Box 19";
                                                "Label : T"
                                            }
                                        }
                                    }
                                }
                                subgraph cluster29 {
                                    label = "then";
                                    "Label : O"
                                }
                            }
                        }
                        subgraph cluster22 {
                            label = "Box 19";
                            subgraph cluster30 {
                                label = "Box 20";
                                subgraph cluster31 {
                                    label = "if";
                                    subgraph cluster32 {
                                        label = "and";
                                        subgraph cluster33 {
                                            label = "Box 21";
                                            subgraph cluster34 {
                                                label = "Box 22";
                                                l8 [label = "{  Label : A \l| \
                                                                 Label : B \l| \
                                                                 Label : C \l| \
                                                                 Label : D \l} \
                                                                "];
                                            }
                                        }
                                        subgraph cluster35 {
                                            label = "Box 23";
                                            subgraph cluster {
                                                label = "Box 24";
                                                "Label : T"
                                            }
                                        }
                                    }
                                }
                                subgraph cluster36 {
                                    label = "then";
                                    "Label : C"
                                }
                            }
                        }

                    }
            }

            subgraph cluster_5 {
                label = "Box 24"
                fontsize=30;

                color=red;

                subgraph cluster_6 {
                    label = "Box 25";

                    subgraph cluster_8 {
                        label = "Box 26";

                        subgraph cluster {
                            label = "Box  27";
                            "Label : 200"
                        }

                    }

                }
                subgraph cluster {
                    label = "Box 28";
                    subgraph cluster {
                        label = "Box 29";
                        l1 [label = "{  Label : F \l| \
                                        Label : N \l |\
                                        Label : H \l |\
                                        Label : N \l} \
                                        "];

                        subgraph cluster {
                            label = "Box 30";
                            subgraph cluster {
                                label = "Box 31";
                                l2 [label = "{  C \l| \
                                                I\l} \
                                                "];
                            }
                            l3 [label = "{  label : F \l| \
                                             label : F \l| \
                                             label : A \l| \
                                             label : F \l} \
                                            "];
                        }
                    }

                }

            }

        }
      }
    }
  }
}

我面临的问题是子图的布局。我希望将"Box 13"、"Box 11"和"Box 6"以垂直方式排列。我想先把"Box 6"和"Box 11"放在第一行,然后把"Box 13"放在第二行。这个布局将在"Box 5"内进行。我知道有可用的布局选项(此处)。我可以将这三个盒子(6、11、13)放入单独的文件中并组合起来。但我不清楚如何在"Box 5"内布局这三个盒子。谢谢。

我正在基于XML创建这个图表,并需要为不同的XML创建更多类似性质的图表。欢迎提出关于更适合的工具的建议。 - Kunal Jha
浏览文档后,看起来 gvpr 可能有助于将较小的图形组合成一个主图。但我还没有理解它的内部工作原理。 - Kunal Jha
你有没有尝试过Altova的XML-Spy或Oracle的JDeveloper?它们都支持XSD,看起来有点类似于你的输出。 - CodeFreezr
你应该尝试使用表格布局,那里可以使用所有 HTML 功能,包括 rowspancolspan。更多信息请查看 Table and Cell Gradients | Graphviz. - Wolf
1个回答

0

你需要一些脚手架,即无形的边缘(和可能的节点), 尝试在最后一个花括号之前添加以下内容:

"Label : C"->"Label : 2 days"->l6[color=none]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接