使用 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 图的主要内容,如果未能解决你的问题,请参考以下文章