【发布时间】:2018-01-22 19:08:26
【问题描述】:
我有一个表示有向图的点文件 (DiGraph)。我希望在 networkx DiGraph 对象中读取它。
我使用了networkx.drawing.nx_agraph.read_dot(PATH),但是此函数返回的图表中的节点只是简单的'str' 类型,并且标签在翻译中都丢失了。
Dotfile 是这样的:
digraph code {
graph [bgcolor=white fontname="Courier" splines="ortho"];
node [fillcolor=gray style=filled shape=box];
edge [arrowhead="normal"];
"0x000052c0" -> "0x00003a40" [label="section..text" color="red" URL="section..text/0x00003a40"];
"0x00003a40" [label="section..text" URL="section..text/0x00003a40"];
"0x000052c0" -> "0x0021ee08" [label="reloc.__libc_start_main_8" color="green" URL="reloc.__libc_start_main_8/0x0021ee08"];
"0x0021ee08" [label="reloc.__libc_start_main_8" URL="reloc.__libc_start_main_8/0x0021ee08"];
}
我为阅读这个文件而写的是这样的:
import networkx as nx
G = nx.drawing.nx_agraph.read_dot(DOT_GRAPH_NAME)
谁有更好的方法?我可以自己写,但最好有一些工作和测试的东西。
【问题讨论】:
-
更好的方法是什么?渲染图表?如果您向我们展示您的 DOT 文件,也许我们可以提供帮助。
-
我的意思是一种将点文件读入 netwoorkx 图形对象的更好方法。点文件很大,但我会发布几行
-
关注图表中可以渲染的可用部分,一个小的子集,让我们看看我们是否可以解决您的标签问题。
-
我添加了一个可以渲染的简单示例。读取的节点只是引号中的地址。括号里的东西全丢了。边是两个节点之间的箭头符号
-
很明显 networkx 不尊重正确的点语法,因为使用 GraphViz 2.38 对我来说,你的图表看起来很好。如果您愿意,我会根据此发布答案。