AttributeError: объект 'module' не имеет атрибута 'graphviz_layout' с networkx 1.11

Я пытаюсь нарисовать некоторые DAG, используя networkx 1.11, но я столкнулся с некоторыми ошибками, здесь тест:

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, имеющий dot, доступный в PATH. Что мне не хватает?

Как только это сработает, как рисовать график с узлами, которые:

  • Использовать белый цвет фона
  • Вставьте ярлыки внутри
  • Направленные стрелки
  • Устанавливаются красиво либо автоматически, либо вручную

Нечто похожее на изображение ниже

введите описание изображения здесь

Как вы можете видеть на этом изображении, узлы выравниваются очень красиво

Ответы

Ответ 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()

введите описание изображения здесь