Рисование графа в макете graphviz в python с использованием nx.draw_graphviz дает ошибку
Я пытаюсь нарисовать мульти-граф G на 100 узлов в макете graphviz в сети Python, поэтому я провел два испытания:
Пробная версия 1 nx.draw_graphviz работает следующим образом nx.draw_graphviz(G)
но я получаю следующую ошибку повторяется для всех узлов в графе:
Ошибка: узел 1, позиция [0.127506302389087, 0.3262608552621944], ожидаются два двойных
Затем, пытаясь найти решение, я использовал пробную версию 2 A=nx.to_agraph(G)
чтобы получить график Pygraphviz, но когда я пытаюсь нарисовать с nx.draw_graphviz(A)
Я получаю следующую ошибку:
AttributeError: у объекта 'AGraph' нет атрибута 'number_of_selfloops'
nx.graphviz_layout, но он возвращает словарь позиций, обозначенных узлами, и я не знаю, как использовать его для рисования макета graphviz.
Обратите внимание, что я импортировал модули graphviz, pygraphviz и pydot, но я не знаю, какие из них действительно нужны для этого, но он все равно не работает.
Чего-то не хватает, чтобы нарисовать график networkx в графическом макете?
Полная трассировка ошибок для
Испытание 1
Traceback (most recent call last):
File "main.py", line 102, in <module>
d.display_graph(sub_normal,NEUTRAL_RANGE)
File "/home/abdallah/stage/Reputation_system/display.py", line 33, in display_graph
nx.draw_graphviz(G)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pylab.py", line 982, in draw_graphviz
pos = nx.drawing.graphviz_layout(G, prog)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 257, in graphviz_layout
return pydot_layout(G=G,prog=prog,root=root,**kwds)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 277, in pydot_layout
D=P.create_dot(prog=prog)
File "/usr/lib/python2.7/dist-packages/pydot.py", line 1802, in <lambda>
lambda f=frmt, prog=self.prog : self.create(format=f, prog=prog))
File "/usr/lib/python2.7/dist-packages/pydot.py", line 2023, in create
status, stderr_output) )
pydot.InvocationException: Program terminated with status: 1. stderr follows: Error: node 0, position [0.7145101895899024, 0.9016482786797262], expected two doubles
испытание 2
Traceback (most recent call last):
File "main.py", line 102, in <module>
d.display_graph(sub_normal,NEUTRAL_RANGE)
File "/home/abdallah/stage/Reputation_system/display.py", line 33, in display_graph
nx.draw_graphviz(A)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pylab.py", line 982, in draw_graphviz
pos = nx.drawing.graphviz_layout(G, prog)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 257, in graphviz_layout
return pydot_layout(G=G,prog=prog,root=root,**kwds)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 273, in pydot_layout
P=to_pydot(G)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 192, in to_pydot
strict=N.number_of_selfloops()==0 and not N.is_multigraph()
AttributeError: 'AGraph' object has no attribute 'number_of_selfloops'
1 ответ
Я использовал graphviz_layout и мне это удалось, вот мой пример на Python:
try:
import pygraphviz
from networkx.drawing.nx_agraph import graphviz_layout
except ImportError:
try:
import pydotplus
from networkx.drawing.nx_pydot import graphviz_layout
except ImportError:
raise ImportError("This example needs Graphviz and either "
"PyGraphviz or PyDotPlus")
import networkx as nx
plt.figure(figsize=(6,8))
pos=graphviz_layout(G)
nx.draw_networkx_nodes(G,pos,nodelist=G.nodes(),node_size=node_sizes,\
linewidths=0.1,vmin=0,vmax=1,alpha=0.8,\
node_color=[D[n] for n in G.nodes()])
nx.draw_networkx_edges(G,pos,edgelist=G.edges(),width=0.1,\
edge_color="black",alpha=0.6)
plt.axis('off')
plt.tight_layout()
plt.show()
Вот еще один пример использования graphviz_layout с сайта Networkx
https://networkx.github.io/documentation/networkx-1.10/examples/drawing/lanl_routes.html