边缘的重量未显示

问题描述

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

enter image description here

当我尝试绘制边权重时,我的图中没有显示边 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,3),5),(1,6),(2,1),(4,4),10),]

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,arc_weight)

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

解决方法

第一个问题问得好。欢迎使用 Stackoverflow。

你的代码没问题。您遇到了 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)

产生以下图:

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...