从字符串而不是文件中读取 networkx 中的点图
Read dot graph in networkx from a string and not file
根据 documentation here,read_dot()
方法将文件句柄作为输入。
即使我这样做也能正常工作,
g = nx.drawing.nx_agraph.read_dot(dotFile)
其中 dotFile
是文件句柄。但是,如果我在变量中有 dot
格式的图形,我该如何导入 nx 图形格式?
编辑 -
我的变量看起来像这样,
dotFormat = """
digraph G{
edge [dir=forward]
node [shape=plaintext]
0 [label="0 (None)"]
0 -> 7 [label="root"]
1 [label="1 (The)"]
4 [label="4 (great Indian Circus)"]
4 -> 4 [label="compound"]
4 -> 1 [label="det"]
4 -> 4 [label="amod"]
5 [label="5 (is)"]
6 [label="6 (in)"]
7 [label="7 (Mumbai)"]
7 -> 6 [label="case"]
7 -> 5 [label="cop"]
7 -> 4 [label="nsubj"]
}
"""
编辑 2 - 我还尝试使用 py_dot
阅读,然后像这样转换为 networkx 图。
pg = pydot.graph_from_dot_data(dotFormat)
g = nx.nx_pydot.from_pydot(pg)
然后我得到以下错误
if P.get_strict(None): # pydot bug: get_strict() shouldn't take argument
AttributeError: 'list' object has no attribute 'get_strict'
我该怎么办?
您可以通过显式使用 pygraphviz 加载图形然后将其转换为 networkx 图形(在本例中为 MultiDiGraph)来实现。
In [1]: import pygraphviz
In [2]: from networkx.drawing import nx_agraph
In [3]: dotFormat = """
digraph G{
edge [dir=forward]
node [shape=plaintext]
0 [label="0 (None)"]
0 -> 7 [label="root"]
1 [label="1 (The)"]
4 [label="4 (great Indian Circus)"]
4 -> 4 [label="compound"]
4 -> 1 [label="det"]
4 -> 4 [label="amod"]
5 [label="5 (is)"]
6 [label="6 (in)"]
7 [label="7 (Mumbai)"]
7 -> 6 [label="case"]
7 -> 5 [label="cop"]
7 -> 4 [label="nsubj"]
}
"""
In [4]: G = nx_agraph.from_agraph(pygraphviz.AGraph(dotFormat))
graph_from_dot_data实际上returns一个图表列表。
所以只使用其中的一个元素
根据 documentation here,read_dot()
方法将文件句柄作为输入。
即使我这样做也能正常工作,
g = nx.drawing.nx_agraph.read_dot(dotFile)
其中 dotFile
是文件句柄。但是,如果我在变量中有 dot
格式的图形,我该如何导入 nx 图形格式?
编辑 - 我的变量看起来像这样,
dotFormat = """
digraph G{
edge [dir=forward]
node [shape=plaintext]
0 [label="0 (None)"]
0 -> 7 [label="root"]
1 [label="1 (The)"]
4 [label="4 (great Indian Circus)"]
4 -> 4 [label="compound"]
4 -> 1 [label="det"]
4 -> 4 [label="amod"]
5 [label="5 (is)"]
6 [label="6 (in)"]
7 [label="7 (Mumbai)"]
7 -> 6 [label="case"]
7 -> 5 [label="cop"]
7 -> 4 [label="nsubj"]
}
"""
编辑 2 - 我还尝试使用 py_dot
阅读,然后像这样转换为 networkx 图。
pg = pydot.graph_from_dot_data(dotFormat)
g = nx.nx_pydot.from_pydot(pg)
然后我得到以下错误
if P.get_strict(None): # pydot bug: get_strict() shouldn't take argument
AttributeError: 'list' object has no attribute 'get_strict'
我该怎么办?
您可以通过显式使用 pygraphviz 加载图形然后将其转换为 networkx 图形(在本例中为 MultiDiGraph)来实现。
In [1]: import pygraphviz
In [2]: from networkx.drawing import nx_agraph
In [3]: dotFormat = """
digraph G{
edge [dir=forward]
node [shape=plaintext]
0 [label="0 (None)"]
0 -> 7 [label="root"]
1 [label="1 (The)"]
4 [label="4 (great Indian Circus)"]
4 -> 4 [label="compound"]
4 -> 1 [label="det"]
4 -> 4 [label="amod"]
5 [label="5 (is)"]
6 [label="6 (in)"]
7 [label="7 (Mumbai)"]
7 -> 6 [label="case"]
7 -> 5 [label="cop"]
7 -> 4 [label="nsubj"]
}
"""
In [4]: G = nx_agraph.from_agraph(pygraphviz.AGraph(dotFormat))
graph_from_dot_data实际上returns一个图表列表。
所以只使用其中的一个元素