使用 Graphviz 绘制 NetworkX 图

Posted

技术标签:

【中文标题】使用 Graphviz 绘制 NetworkX 图【英文标题】:Drawing NetworkX graph with Graphviz 【发布时间】:2021-07-27 21:46:41 【问题描述】:

我正在尝试绘制“Spring Layout”类型的图表。 我可以使用 NetworkX 做到这一点,但我得到了一个非常混乱的图表,我无法整理。 我有一个 250 个分支图,代表一个有一个回路和几个径向分支的电路。

我了解到可以使用 Graphviz 优化节点放置。 确实,NetworkX 似乎具有与 Graphviz 的链接功能,例如 nx.nx_pydot.graphviz_layout(G)

我尝试使用它,但收到以下错误消息:

pos = nx.nx_pydot.graphviz_layout(G) 文件 “C:\Python27\lib\site-packages\networkx\drawing\nx_pydot.py”,行 261,在 graphviz_layout 中 返回 pydot_layout(G=G, prog=prog, root=root, **kwds) 文件“C:\Python27\lib\site-packages\networkx\drawing\nx_pydot.py”,行 310,在 pydot_layout D_bytes = P.create_dot(prog=prog) 文件“C:\Python27\lib\site-packages\pydot.py”,第 1734 行,在 new_method 中 format=f, prog=prog, encoding=encoding) 文件“C:\Python27\lib\site-packages\pydot.py”,第 1933 行,在创建中 raise OSError(*args) OSError: [Errno 2] "neato" not found in path.

我已经正确安装了这两个库,并通过键入将它们包含在我的 Python 代码中:

import networkx as nx
import graphviz as gv

我应该安装任何其他库以使其正常工作吗?

欢迎任何帮助。 谢谢。

Eneko。

【问题讨论】:

【参考方案1】:

通过添加import pydot 并使用pos = nx.nx_pydot.graphviz_layout(G,prog,root) 设置节点位置解决了该问题 实际上,它可以与以下pos = nx.nx_pydot.pydot_layout(G)

一起使用

最后,我的代码如下所示:

G = nx.Graph()
G.add_weighted_edges_from(BranchList)
prog='neato'
root=None
# pos = nx.nx_pydot.graphviz_layout(G,prog,root)
pos = nx.nx_pydot.pydot_layout(G)
plt.figure()    
nx.draw(G,pos,edge_color='black',width=1,linewidths=1, node_size=10,node_color='blue',alpha=0.9)
plt.axis('on')
plt.show()

请注意,我将两个可能的节点定位 pos= 解决方案之一保留为注释行。

干杯。 埃内科

【讨论】:

以上是关于使用 Graphviz 绘制 NetworkX 图的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 和 networkx 进行大图可视化

使用 nx.draw_graphviz 在 python 中的 graphviz 布局中绘制图形给出错误

使用Python-iGraph绘制好友关系图

使用默认为节点名称的节点标签绘制 networkx 图

networkx之图遍历和图绘制

python networkx绘制图