具有大(子)群集的图形的隐藏点错误消息

时间:2012-07-20 18:11:38

标签: graphviz dot

我编写了一个小工具转储(以dot格式)项目的依赖关系图,其中生成在同一目录中的所有文件都收集在一个集群中。当我尝试生成包含相应图形的pdf时,dot开始哭泣:

命令dot -Tpdf trimmedgraph.dot -o graph.pdf会产生隐秘的错误消息Error: install_in_rank clusterReals virtual rank 21 i = 0 an = 0,但不会在谷歌上产生任何结果。

我尝试手动编辑trimmedgraph.dot:将子图clusterReals转换为Reals会生成一个可编译的文件但我的Reals/目录的所有内容都是显然不再聚集了。

有没有办法只生成点有效文件(我计划最终向上游发送补丁,但如果我不能保证一切都会好的话......)?

我已经把trimmedgraph.dot online的两个版本放了,但它们相当大,并且考虑到我不知道问题出在哪里,我无法真正想出一个重新创建问题的最小文件。 / p>

1 个答案:

答案 0 :(得分:3)

我认为(但找不到任何关于此的文档)群集名称必须在整个点文件中是唯一的。但是,在您的文件中,有两个子图名为clusterReals

解决方案是确保所有群集名称都是唯一的 - 因为名称不会出现在输出中的任何位置,所以在生成点文件时可能只使用数字。


快速测试表明,重用相同的群集名称会发生​​奇怪的事情:

digraph dependencies {
    subgraph cluster0 {
        label="First cluster 0";
        Node1;
        subgraph cluster0 {
            label="Second cluster 0";
            Node2;
        }
    }
    subgraph cluster0 {
        label="Third cluster 0";
        Node3;
    }
    subgraph cluster1 {
        label="Cluster 1";
        Node4;
        subgraph cluster0 {
            label="Fourth cluster 0";
            Node5;
        }
    }
}

graphviz output

所有cluster0似乎都合并在一起(节点,标签),除非它不可能,因为它们被其他集群包含在内。至少它看起来像是......因为后果是不可预测的(在你的情况下是错误的),我会尝试总是使用唯一的集群名称。