Python 计算networkx中节点之间的边

Python 计算networkx中节点之间的边,python,networkx,Python,Networkx,我有一个图,其中我的节点可以在两个方向上有多条边,我想根据它们之间所有边的总和设置节点之间的宽度 import networkx as nx nodes = [0,1] edges = [(0,1),(1,0)] G = nx.Graph() G.add_nodes_from(nodes) G.add_edges_from(edges) weights = [2,3] nx.draw(G, width = weights) 我希望将0和1之间的宽度设置为5,因为这是总重量。首先需要创建一个多向

我有一个图,其中我的节点可以在两个方向上有多条边,我想根据它们之间所有边的总和设置节点之间的宽度

import networkx as nx
nodes = [0,1]
edges = [(0,1),(1,0)]
G = nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
weights = [2,3]
nx.draw(G, width = weights)

我希望将0和1之间的宽度设置为5,因为这是总重量。

首先需要创建一个
多向图
,并向其添加所有可能的边。这是因为它支持同一组节点(包括自循环)之间的多个定向EGDE

import networkx as nx
nodes = [0, 1, 2, 3, 4, 5]
edges = [(0,1), (1,0), (1, 0),(0, 1), (2, 3), (2, 3), (2, 3), (2, 3),
         (4, 1), (4, 1), (4, 1), (4, 1), (4, 1), (4, 1), (4, 5), (5, 0)]
G = nx.MultiDiGraph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
接下来,创建一个包含每个边的计数的字典

from collections import Counter
width_dict = Counter(G.edges())
edge_width = [ (u, v, {'width': value}) 
              for ((u, v), value) in width_dict.items()]
现在从上面创建的
edge\u width
字典创建一个新的
DiGraph

G_new = nx.DiGraph()
G_new.add_edges_from(edge_width)
使用加厚边打印

这是上述答案的延伸

添加边缘标签

有关更多信息,请参阅

pos = nx.spring_layout(G_new)
nx.draw(G_new, pos)
edge_labels=dict([((u,v,),d['width'])
             for u,v,d in G_new.edges(data=True)])

nx.draw_networkx_edges(G_new, pos=pos)
nx.draw_networkx_edge_labels(G_new, pos, edge_labels=edge_labels,
                             label_pos=0.25, font_size=10)

您还可以使用工作代码查看

参考资料


首先,您需要创建一个
多向图
,并向其添加所有可能的边。这是因为它支持同一组节点(包括自循环)之间的多个定向EGDE

import networkx as nx
nodes = [0, 1, 2, 3, 4, 5]
edges = [(0,1), (1,0), (1, 0),(0, 1), (2, 3), (2, 3), (2, 3), (2, 3),
         (4, 1), (4, 1), (4, 1), (4, 1), (4, 1), (4, 1), (4, 5), (5, 0)]
G = nx.MultiDiGraph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
接下来,创建一个包含每个边的计数的字典

from collections import Counter
width_dict = Counter(G.edges())
edge_width = [ (u, v, {'width': value}) 
              for ((u, v), value) in width_dict.items()]
现在从上面创建的
edge\u width
字典创建一个新的
DiGraph

G_new = nx.DiGraph()
G_new.add_edges_from(edge_width)
使用加厚边打印

这是上述答案的延伸

添加边缘标签

有关更多信息,请参阅

pos = nx.spring_layout(G_new)
nx.draw(G_new, pos)
edge_labels=dict([((u,v,),d['width'])
             for u,v,d in G_new.edges(data=True)])

nx.draw_networkx_edges(G_new, pos=pos)
nx.draw_networkx_edge_labels(G_new, pos, edge_labels=edge_labels,
                             label_pos=0.25, font_size=10)

您还可以使用工作代码查看

参考资料


可能的重复至少,您需要更改创建图形的方式。networkx
图形
是无向的,最多有一条边。它只会忽略第二次添加边。尝试使用一个
多重图形来开始。可能的重复至少,您需要更改创建图形的方式。networkx
图形
是无向的,最多有一条边。它只会忽略第二次添加边。尝试使用
多重图形启动。