【问题标题】:AttributeError: 'module' object has no attribute 'graphviz_layout' with networkx 1.11AttributeError:“模块”对象在 networkx 1.11 中没有属性“graphviz_layout”
【发布时间】:2017-01-17 13:50:28
【问题描述】:

我正在尝试使用 networkx 1.11 绘制一些 DAG,但遇到了一些错误,这是测试:

import networkx as nx

print nx.__version__

G = nx.DiGraph()
G.add_node(1,level=1)
G.add_node(2,level=2)
G.add_node(3,level=2)
G.add_node(4,level=3)

G.add_edge(1,2)
G.add_edge(1,3)
G.add_edge(2,4)

import pylab as plt
nx.draw_graphviz(G, node_size=1600, cmap=plt.cm.Blues,
                 node_color=range(len(G)),
                 prog='dot')
plt.show()

这是回溯:

Traceback (most recent call last):
  File "D:\sources\personal\python\framework\stackoverflow\test_dfs.py", line 69, in <module>
    prog='dot')
  File "d:\virtual_envs\py2711\lib\site-packages\networkx\drawing\nx_pylab.py", line 984, in draw_graphviz
    pos = nx.drawing.graphviz_layout(G, prog)
AttributeError: 'module' object has no attribute 'graphviz_layout'

我正在使用 python 2.7.11 x64、networkx 1.11,并且我已经安装了 graphviz-2.38,在 PATH 中提供了 dot。我错过了什么?

一旦它起作用,我怎么能用节点绘制图形:

  • 使用白色背景色
  • 里面有标签
  • 有方向箭头
  • 自动或手动安排得很好

类似于下图的东西

正如您在该图像中看到的那样,节点对齐得非常好

【问题讨论】:

  • 使用nx.graphviz_layoutnx.drawing.nx_agraph.graphviz_layout
  • @ValentinLorentz 尝试nx.graphviz_layout 时,我会得到AttributeError: 'module' object has no attribute 'graphviz_layout',但使用nx.drawing.nx_agraph.graphviz_layout 有点效果。尽管nx.graphviz_layout(G, prog='dot') nor nx.drawing.nx_agraph.graphviz_layout(G) 都没有显示任何内容。如果您可以提供一个 mcve 示例,我可以验证您的答案,谢谢!
  • 如何让图表具有该主题,并在节点中添加标签?

标签: python python-2.7 networkx


【解决方案1】:

在 networkx 的更高版本中,包布局已更改。您可以显式导入 graphivz_layout 函数。

import networkx as nx
import pylab as plt
from networkx.drawing.nx_agraph import graphviz_layout


G = nx.DiGraph()
G.add_node(1,level=1)
G.add_node(2,level=2)
G.add_node(3,level=2)
G.add_node(4,level=3)

G.add_edge(1,2)
G.add_edge(1,3)
G.add_edge(2,4)

nx.draw(G, pos=graphviz_layout(G), node_size=1600, cmap=plt.cm.Blues,
        node_color=range(len(G)),
        prog='dot')
plt.show()

【讨论】:

  • Graphviz 可以为所欲为。感谢您的投票,但在给出答案后更改问题并不是那么好meta.stackoverflow.com/questions/296489/…
  • 您应该奖励赏金以回答您最初提出的问题。我可以回答您的后续问题,但它与您最初的问题不同。
  • 小改动@Aric:当显式使用graphviz_layout 时,prog= 参数需要传递给graphviz_layout,而不是.draw。如果不是 "neato" 则假定(根据文档)。
猜你喜欢
  • 2017-04-24
  • 2018-08-19
  • 1970-01-01
  • 2017-06-22
  • 2022-06-16
  • 2010-11-18
相关资源
最近更新 更多