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

Car*_*ndo 3 graphviz

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

有没有可以让我做到这一点的软件包?

mar*_*pet 6

是的,这与graphviz一起提供。

有关图表的统计资料可以通过喂养你的图表为获得gc- 计数图形组件

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

如果你想生成有关图形更具体的统计数据,您可以使用该工具gvpr- 图模式扫描和处理语言

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

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


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

digraph graphinfotest {
    a -> {b; c; d} -> e;
    b -> c;
}
Run Code Online (Sandbox Code Playgroud)

以下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);
}
Run Code Online (Sandbox Code Playgroud)

gvpr -f graphinfo.gvpr graph.gv
Run Code Online (Sandbox Code Playgroud)

将产生以下输出:

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
Run Code Online (Sandbox Code Playgroud)