边缘的重量没有显示

Weight of edges is not showing

我尝试使用 networkx:
制作这样的图表

当我尝试绘制边权重时,边 1->2(即 2)的权重未显示在我的图表中。

我该如何解决这个问题?

import networkx as nx
from matplotlib import pyplot as plt

DGraph = nx.DiGraph()

vertex_list = [0,1,2,3,4]
edges_list = [(0,4,2),(0,2,3),(0,1,5),
(1,2,2),(1,3,6),
(2,1,1),(2,3,2),
(4,3,4),(4,2,10),(4,1,6),
]

DGraph.add_nodes_from(vertex_list)
DGraph.add_weighted_edges_from(edges_list)

DGraph._node[0]['pos'] = (0,8)
DGraph._node[1]['pos'] = (4,2)
DGraph._node[2]['pos'] = (2,-4)
DGraph._node[3]['pos'] = (-2,-4)
DGraph._node[4]['pos'] = (-4,2)

node_pos=nx.get_node_attributes(DGraph,'pos')
arc_weight=nx.get_edge_attributes(DGraph,'weight')

nx.draw_networkx_nodes(DGraph , pos=node_pos)
nx.draw_networkx_labels(DGraph , pos=node_pos)
nx.draw_networkx_edges(DGraph , node_pos,connectionstyle='arc3, rad = 0.05')
nx.draw_networkx_edge_labels(DGraph , node_pos , arc_weight)

plt.axis('off')
plt.show()

多么好的第一个问题。欢迎来到 Whosebug。

你的代码没问题。您 运行 受到 networkx 的限制,它在标记边缘时不会跟踪边缘的弧度。相反,它将边缘标签放置在两个节点之间的直线上;默认情况下,它选择该直线的中心。这对您的情节有两个影响:

  1. 边缘标签略有偏移 w.r.t。你的边缘路径,和
  2. 双向边上的标签被绘制在彼此之上。

第一个问题无解;但是,您可以通过将参数 label_pos 指定为 0.5 以外的任何值来解决第二个问题。 例如,将您的代码更改为

nx.draw_networkx_edge_labels(DGraph, pos=node_pos, edge_labels=arc_weight, label_pos=0.33)

产生以下情节: