GraphViz:给定.dot文件,如何计算节点统计信息?

时间:2015-01-22 00:59:11

标签: graphviz

给定图的.dot表示,我希望能够编译关于每个节点的一些统计信息。统计数据可以是:边数,节点数,节点数。

是否有可用的包可以让我这样做?

1 个答案:

答案 0 :(得分:5)

是的,这与graphviz开箱即用。

有关图表的一般统计信息可以通过将图表输入gc - 计数图表组件来获得:

  

gc (...)打印到标准输出的节点数,边数,连接数   输入文件中包含的组件或群集。

如果您想要生成有关图表的更具体的统计信息,可以使用工具gvpr - 图表模式扫描和处理语言

gvpr允许针对您的图表执行自定义脚本。该脚本可能只是像您的情况一样收集自定义统计信息,或者甚至可能修改输入图。

以上链接的文档非常完整,并且比我在这里做的更好地解释了所有可用的属性和功能。下面只是一个简单的例子来帮助您入门。


如果我们有以下图表graph.gv

digraph graphinfotest {
    a -> {b; c; d} -> e;
    b -> c;
}

以下gvpr脚本(在文件graphinfo.gvpr中):

BEG_G {
    int n = nNodes($G);
    int e = nEdges($G);
    printf("There are %d nodes and %d edges in %s\n", n, e, $G.name);
}
N {
    printf("Node %s - indegree %d, outdegree %d\n", $.name, $.indegree, $.outdegree);
}

调用
gvpr -f graphinfo.gvpr graph.gv

将产生以下输出:

There are 5 nodes and 7 edges in graphinfotest
Node a - indegree 0, outdegree 3
Node b - indegree 1, outdegree 2
Node c - indegree 2, outdegree 1
Node d - indegree 1, outdegree 1
Node e - indegree 3, outdegree 0