9

我正在尝试以 DOT 格式处理和渲染一些图形。我拥有的点文件很大(~300MB),它包含多个有向图

digraph 1 {...}
digraph 2 {...}
digraph 3 {...}

我有 2 个问题:
1. 是否可以只使用 1 个有向图而不是整个图?
dot -3 -Tps mygraph.dot -o out.ps只渲染有向图 3 的东西吗?

2.处理点格式最好的Python库是什么?(其他语言也可以)
这里有两个我试过了,但不够好
pydot导入后给我一个有向图列表,很好,但它不处理“ 。” 在节点名称中。例如nd.nd [label="nd_node"]会失败

pygraphviz它确实处理“。”,但仅在文件中给出多个图形定义时才导入有向图 1 :(

4

2 回答 2

2

不确定这是否是您想要的,但您只需要编写一个简单的解析器,或者您想调用的任何内容。pygraphviz 通过简单地读取和解析来处理文件输入,就像处理字符串输入一样。

因此,一段示例代码将是:

f = open(filename, 'r')
graph = [[]]
while True:
    line = f.readline()
    if not line:
        break
    if declare_new_graph(line):
        graph.append([])
    graph[-1].append(line)

#now you have a list of graphs
#each is a list of lines
#with first line containing the name
#to get the string representation of graph "i"
str = '\n'.join(graph[i])
于 2011-11-29T01:07:51.717 回答
2

既然你有dot,你也应该有gvpr,一个图形处理工具。您可以使用简单的gvpr脚本打印第三张图,如下所示:

BEGIN { int count = 0; }
BEG_G {
    count = count + 1;
    if(count == 3) {
        write($G);
    }
}

然后,您可以将其用作源过滤器:

cat mygraph.dot | gvpr -f thirdgraph.gv | dot -Tps -o out.ps
于 2012-02-29T04:06:39.183 回答