Networkx 和 graphviz。如何抑制点输出中的节点和边缘位置?
Networkx and graphviz. How to suppress node and edge positions in dot output?
使用这个简单的 networkx 脚本。
import networkx as nx
g = nx.DiGraph()
g.add_edge("a","b")
g.add_edge("a","c")
g.add_node("D")
dotter = nx.nx_agraph.to_agraph(g)
dotter.layout("dot")
dot = dotter.to_string()
with open("test_w_pos.dot","w") as fo:
fo.write(dot)
输出为:
strict digraph "" {
graph [bb="0,0,162,108"];
node [label="\N"];
a [height=0.5,
pos="63,90",
width=0.75];
b [height=0.5,
pos="27,18",
width=0.75];
a -> b [pos="e,35.634,35.269 54.285,72.571 50.04,64.081 44.846,53.693 40.134,44.267"];
c [height=0.5,
pos="99,18",
width=0.75];
a -> c [pos="e,90.366,35.269 71.715,72.571 75.96,64.081 81.154,53.693 85.866,44.267"];
D [height=0.5,
pos="135,90",
width=0.75];
}
我希望不具有任何pos
、height
和width
属性,因为它们不同于运行 运行 并且很难在复杂图形上与之前的 运行 进行比较。
期望的输出
strict digraph "" {
node [label="\N"];
a;
b;
a -> b;
c;
a -> c;
D;
}
两个 dot
文件在 svg
中给出基本相同的输出(见下文),所以我发现定位是不必要的,事实上我从未见过将此信息放入 dot
之前的文件。
我在 to_agraph
或 dotter.to_string
中找不到任何内容,但我没有注意到 dotter.layout(dot)
:
中可能存在额外的参数
agraph.py
def layout(self, prog="neato", args=""):
"""Assign positions to nodes in graph.
是的,有了这个非常简单的文件,我可以在之后删除定位数据。但是在真实的图表中,会有很多其他颜色和标签属性与位置混合在一起。
具有位置属性的图像:
没有位置属性的图像:
试试 dotter.layout("canon")
(https://graphviz.org/docs/outputs/canon/)。这将提供没有任何定位的(漂亮打印的)图表版本。
如果您只对 dot
文件感兴趣,您可以使用 pydot
interface of networkx
and call write_dot
,例如
drawing.nx_pydot.write_dot(g, "test.dot")
使用这个简单的 networkx 脚本。
import networkx as nx
g = nx.DiGraph()
g.add_edge("a","b")
g.add_edge("a","c")
g.add_node("D")
dotter = nx.nx_agraph.to_agraph(g)
dotter.layout("dot")
dot = dotter.to_string()
with open("test_w_pos.dot","w") as fo:
fo.write(dot)
输出为:
strict digraph "" {
graph [bb="0,0,162,108"];
node [label="\N"];
a [height=0.5,
pos="63,90",
width=0.75];
b [height=0.5,
pos="27,18",
width=0.75];
a -> b [pos="e,35.634,35.269 54.285,72.571 50.04,64.081 44.846,53.693 40.134,44.267"];
c [height=0.5,
pos="99,18",
width=0.75];
a -> c [pos="e,90.366,35.269 71.715,72.571 75.96,64.081 81.154,53.693 85.866,44.267"];
D [height=0.5,
pos="135,90",
width=0.75];
}
我希望不具有任何pos
、height
和width
属性,因为它们不同于运行 运行 并且很难在复杂图形上与之前的 运行 进行比较。
期望的输出
strict digraph "" {
node [label="\N"];
a;
b;
a -> b;
c;
a -> c;
D;
}
两个 dot
文件在 svg
中给出基本相同的输出(见下文),所以我发现定位是不必要的,事实上我从未见过将此信息放入 dot
之前的文件。
我在 to_agraph
或 dotter.to_string
中找不到任何内容,但我没有注意到 dotter.layout(dot)
:
agraph.py
def layout(self, prog="neato", args=""):
"""Assign positions to nodes in graph.
是的,有了这个非常简单的文件,我可以在之后删除定位数据。但是在真实的图表中,会有很多其他颜色和标签属性与位置混合在一起。
具有位置属性的图像:
没有位置属性的图像:
试试 dotter.layout("canon")
(https://graphviz.org/docs/outputs/canon/)。这将提供没有任何定位的(漂亮打印的)图表版本。
如果您只对 dot
文件感兴趣,您可以使用 pydot
interface of networkx
and call write_dot
,例如
drawing.nx_pydot.write_dot(g, "test.dot")