J'essaie de dessiner des DAG en utilisant networkx 1.11 mais je fais face à des erreurs, voici le test:
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()
Et voici le retraçage:
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'
J'utilise python 2.7.11 x64, networkx 1.11 et j'ai installé graphviz-2.38 ayant dot
disponible dans PATH. Que suis-je manquant?
Une fois que cela fonctionne, comment puis-je dessiner le graphique avec des nœuds qui:
Quelque chose de similaire à l'image ci-dessous
Comme vous pouvez le voir sur cette image, les nœuds sont très bien alignés
La disposition du package a changé dans les versions ultérieures de networkx. Vous pouvez importer la fonction graphivz_layout de manière explicite.
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()