Python, pygraphviz, networkx
Я построил ориентированный взвешенный граф, используя networkx, и я могу нарисовать его, но он очень часто пересекает ребра, даже если граф очень маленький. Я также использовал pygraphviz, но я не смог добавить ярлыки. Может ли кто-нибудь помочь мне с этим?
edge_labels=dict([((u,v,),d['weight'])
for u,v,d in DG.edges(data=True)])
pylab.figure(1)
pos=nx.spring_layout(DG)
nx.draw(DG, pos)
nx.draw_networkx_edge_labels(DG,pos,edge_labels=result,font_size=10)
pylab.show()
Как преобразовать его в граф Pygraphviz и добавить к нему метки
1 ответ
Решение
Graphviz рисует атрибут 'label' по краям. Вот пример установки атрибута label для веса ребра, если он существует.
import networkx as nx
import pygraphviz as pgv # need pygraphviz or pydot for nx.to_agraph()
G = nx.DiGraph()
G.add_edge(1,2,weight=7)
G.add_edge(2,3,weight=8)
G.add_edge(3,4,weight=1)
G.add_edge(4,1,weight=11)
G.add_edge(1,3)
G.add_edge(2,4)
for u,v,d in G.edges(data=True):
d['label'] = d.get('weight','')
A = nx.to_agraph(G)
A.layout(prog='dot')
A.draw('test.png')