如何解决边缘的重量未显示
当我尝试绘制边权重时,我的图中没有显示边 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 的限制,它在标记边缘时不会跟踪边缘的弧度。相反,它将边缘标签放置在两个节点之间的一条直线上;默认情况下,它选择该直线的中心。这对您的情节有两个后果:
- 边缘标签稍微偏移了 w.r.t.您的边缘路径,以及
- 双向边上的标签绘制在彼此的顶部。
第一个问题没有解决办法;但是,您可以通过将参数 label_pos
指定为 0.5 以外的任何值来解决第二个问题。
例如,将您的代码更改为
nx.draw_networkx_edge_labels(DGraph,pos=node_pos,edge_labels=arc_weight,label_pos=0.33)
产生以下图:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。