我正在尝试以DOT格式处理和渲染一些图形。 我拥有的点文件很大(~300MB),它包含多个有向图
digraph 1 {...}
digraph 2 {...}
digraph 3 {...}
我有两个问题:
1.是否可以使用渲染仅1个有向图而不是整个图形?
像dot -3 -Tps mygraph.dot -o out.ps
这样只能渲染有关图3的东西?
2.处理点阵格式的最佳Python库是什么?(其他语言也可以接受)
这是我试过的两个,但还不够好
pydot 它在导入后给了我一个有向图列表,这很好,但它不处理“。”在节点名称中。例如,nd.nd [label="nd_node"]
将失败
pygraphviz 它确实处理“。”,但只在文件中给出多个图形定义时导入有向图1 :(
答案 0 :(得分: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])
答案 1 :(得分:1)
由于您有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