Graphviz DOT 文件中的多个图形

Multiple graphs inside Graphviz DOT file

我有这个 Graphviz DOT 图:

digraph unit_test {
    label="Unit test"
    
    edge [fillcolor="#a6cee3" color="#1f78b4"]

    node[shape="ellipse" style="filled" fillcolor="#1f77b4"]
        start
        end
    node[shape="box" style="filled" fillcolor="#ff7f0e"]
        process
        
    subgraph cluster_process {
        label = "Major logic"
        process
    }
    
    start -> process
    process -> end
    
}

以上呈现为:

我有第二张图:

digraph details {
    label = "Process details"
    
    edge [fillcolor="#a6cee3" color="#1f78b4"]
    
    node[shape="ellipse" style="filled" fillcolor="#1f77b4"]
        start
        end
    node[shape="box" style="filled" fillcolor="#ff7f0e"]
        details
    
    subgraph cluster_details {
        label = "Details"
        details
    }
    
    start -> details
    details -> end
}

渲染到:

问题

当我将以上两个图表放入同一个名为 supporting.dot 的 DOT 文件中并使用 运行 dot -Tpng -o supporting.png supporting.dot 命令时,终端会打印出一些乱码并且输出图像文件不会包含两个图,它只包含第一个图。是否可以在单个 DOT 文件中使用多个图形?如果是这样,我错过了什么?

问题不清楚要完成什么,但也许以下是一个起点

digraph G{
subgraph unit_test {
    label="Unit test"
    
    edge [fillcolor="#a6cee3" color="#1f78b4"]

    node[shape="ellipse" style="filled" fillcolor="#1f77b4"]
        start
        end
    node[shape="box" style="filled" fillcolor="#ff7f0e"]
        process
        
    subgraph cluster_process {
        label = "Major logic"
        process
    }
    
    start -> process
    process -> end
    
}

subgraph details {
    label = "Process details"
    
    edge [fillcolor="#a6cee3" color="#1f78b4"]
    
    node[shape="ellipse" style="filled" fillcolor="#1f77b4"]
        start1 [label="start"]
        end1 [label="end"]
    node[shape="box" style="filled" fillcolor="#ff7f0e"]
        details
    
    subgraph cluster_details {
        label = "Details"
        details
    }
    
    start1 -> details
    details -> end1
}

}

注意第二个子图中的命名/标签。

Dot 无法将 2 个图形渲染到一个文件中,您看到的输出可能是其中一个图形的 png 内容。

为了防止这种情况,您可以先通过 gvpack 运行 您的图表 - 类似于:

gvpack -u supporting.dot | dot -Tpng -o supporting.png

这会将 supporting.dot 中的所有图表组合成一个图表,然后用 dot 渲染。

图表的布局可能会受到 gvpack 的更多选项的影响。

在一个输入文件中定义多个图形是合法的。然后,您可以使用 -O 选项生成多个输出文件,如下所示:

dot -Tpng -O multi.gv

这将产生 multi.gv.pngmulti.gv。2.png