чтобы показать веса ребер в проектируемой сети

#python #networkx

#python #networkx

Вопрос:

Я спроектировал двудольный граф и создал новый взвешенный граф. Я хотел бы нарисовать график и показать веса ребер.

Вот моя попытка.

 import networkx as nx
import matplotlib.pyplot as plt
from networkx.algorithms import bipartite
g=nx.Graph()
g.add_nodes_from(['s1','s2','s3','s4','s5'],bipartite=0)
g.add_nodes_from(['t1','t2','t3','t4'],bipartite=1)
g.add_edges_from([('s1','t1'),('s1','t4'),('s2','t1'),('s2','t2'),('s3','t1'),('s3','t4'),('s4','t3'),('s5','t2'),('s5','t3')])
l=bipartite.weighted_projected_graph(g,['s1','s2','s3','s4','s5'])
nx.draw(l, with_labels=True)
plt.show()
  

Отображаются метки узлов, но не веса ребер. Как я могу показать веса ребер?

Ответ №1:

Я изменил ваш код, чтобы включить nx.draw_networkx_edge_labels

 import networkx as nx
import matplotlib.pyplot as plt
from networkx.algorithms import bipartite
g=nx.Graph()
g.add_nodes_from(['s1','s2','s3','s4','s5'],bipartite=0)
g.add_nodes_from(['t1','t2','t3','t4'],bipartite=1)
g.add_edges_from([('s1','t1'),('s1','t4'),('s2','t1'),('s2','t2'),('s3','t1'),('s3','t4'),('s4','t3'),('s5','t2'),('s5','t3')])
l=bipartite.weighted_projected_graph(g,['s1','s2','s3','s4','s5'])
pos = nx.spring_layout(l)
nx.draw(l, pos = pos, with_labels=True)
nx.draw_networkx_edge_labels(l, pos)
  

Вероятно, это покажет больше, чем вы хотите. Я думаю, что это настроено для случаев, когда ребра могут иметь несколько произвольные атрибуты. Я думаю, что вы хотите сделать все, вплоть до определения pos , а затем:

 edge_weights = {(u,v,):d['weight'] for u,v,d in l.edges(data=True)}
nx.draw(l, pos = pos, with_labels=True)
nx.draw_networkx_edge_labels(l,pos,edge_labels=edge_weights)
  

Комментарии:

1. Для меня работает нормально

Ответ №2:

Я использую это предложение, которое помогает мне получить веса:

 l=bipartite.weighted_projected_graph(g3,movies)
  

ввод: l.edges(data=True)
вывод: [('The Dark Knight', 'The Matrix', {'weight': 1}),
('The Dark Knight', 'The Shawshank Redemption', {'weight': 1}),
('The Social Network', 'The Matrix', {'weight': 1})]