Graphviz子图未被可视化

81

我正在尝试在dot中创建一个包含两个子图的图形。代码如下:

digraph G {
        subgraph step1 {
                style=filled;
                node [label="Compiler"] step1_Compiler;
                node [label="Maschine"] step1_Maschine;
                color=lightgrey;
        }

        subgraph step2 {
                style=filled;
                color=lightgrey;
                node [label="Interpretierer"] step2_Interpretierer;
                node [label="Maschine"] step2_Maschine;
                label="Virtuelle Maschine";
        }

        "Programm (Java)" -> step1_Compiler;
        step1_Compiler -> step1_Maschine;
        step1_Maschine -> "Bytecode";
        "Bytecode" -> step2_Interpretierer;
        step2_Interpretierer -> step2_Maschine;
        step2_Maschine -> "Ergebnis";
}
我得到的结果看起来像这样: 上述代码的结果 我希望看到两个子图周围都有一个框。我在这里漏掉了什么?
1个回答

165

你需要在子图的名称前加上 cluster 前缀:

subgraph clusterstep1 {

subgraph clusterstep2 {
为了获得样式和标签。
graphiz文档,章节“子图和簇”中得到以下内容:
如果子图名称以cluster开头,则是一种特殊的簇子图。若支持该语法,布局引擎将绘制所有属于该簇的节点,并将整个簇绘制在一个边界矩形内部。请注意,好坏并存,簇子图不是DOT语言的一部分,而仅是某些布局引擎遵循的一种语法约定。

那么,subgraph和subgraph cluster*都会在布局算法下形成可视化分组吗? - Chris
16
在名称前加上“cluster”这样的设计选择太愚蠢了...为什么关键字“subgraph”不够用呢? - 71GA
@71GA:您说得完全正确,但为什么要在这里问呢?请向Graphviz提交错误报告。 - einpoklum
3
@71GA:我自己提交了... https://gitlab.com/graphviz/graphviz/-/issues/2187 - einpoklum
2
谢谢您!我有一个包含两个子图的文件,其中一个恰好被称为“cluster”,我无法弄清楚为什么只有其中一个是可见的... - Joachim Sauer

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