将.dot文件导入为子图

时间:2014-10-07 15:05:34

标签: graphviz dot

是否有 - 通过语言功能或通过预先准备 - 可以将外部.dot文件作为子图包含到另一个文件中?

我正在开发一个相对较大的图表,虽然是手动维护,但未生成。

能够定义一些

会很方便

subgraph01.dot

digraph subgraph01 {
 /* lot of nodes and edges */
}

subgraph02.dot

digraph subgraph02 {
 /* lot of nodes and edges */
}

然后执行graph.dot

之类的操作
digraph BigGraph {
    import subgraph01;
    import subgraph02;
    A -> subgraph01.Node1
    A -> subgraph02.Node1
    subgraph01.Node10 -> subgraph02.Node99
    /* etc. */
}

有办法吗?

1 个答案:

答案 0 :(得分:11)

我立即想到两个选择。一种是使用宏处理器,例如m4。鉴于BigGraph.m4

digraph BigGraph {
    define(`digraph',`subgraph')
    include(`subgraph01.dot')
    include(`subgraph02.dot')
    A -> subgraph01.Node1
    A -> subgraph02.Node1
    subgraph.Node10 -> subgraph.Node99
    /* etc. */
}

......跑步:

$ m4 BigGraph.m4 

...生产:

digraph BigGraph {
    subgraph subgraph01 {
 /* lot of nodes and edges */
}


    subgraph subgraph02 {
 /* lot of nodes and edges */
}


    A -> subgraph01.Node1
    A -> subgraph02.Node1
    subgraph.Node10 -> subgraph.Node99
    /* etc. */
}

可能允许采用更复杂方法的另一种选择是使用 来自GraphViz的gvpr。我试图创建一个使用gvpr执行此操作的示例,但是我没有成功,所以我建议只在需要图形感知方法而不是使用m4的简单方法时尝试。