边缘的重量没有显示
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 的限制,它在标记边缘时不会跟踪边缘的弧度。相反,它将边缘标签放置在两个节点之间的直线上;默认情况下,它选择该直线的中心。这对您的情节有两个影响:
- 边缘标签略有偏移 w.r.t。你的边缘路径,和
- 双向边上的标签被绘制在彼此之上。
第一个问题无解;但是,您可以通过将参数 label_pos
指定为 0.5 以外的任何值来解决第二个问题。
例如,将您的代码更改为
nx.draw_networkx_edge_labels(DGraph, pos=node_pos, edge_labels=arc_weight, label_pos=0.33)
产生以下情节:
我尝试使用 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 的限制,它在标记边缘时不会跟踪边缘的弧度。相反,它将边缘标签放置在两个节点之间的直线上;默认情况下,它选择该直线的中心。这对您的情节有两个影响:
- 边缘标签略有偏移 w.r.t。你的边缘路径,和
- 双向边上的标签被绘制在彼此之上。
第一个问题无解;但是,您可以通过将参数 label_pos
指定为 0.5 以外的任何值来解决第二个问题。
例如,将您的代码更改为
nx.draw_networkx_edge_labels(DGraph, pos=node_pos, edge_labels=arc_weight, label_pos=0.33)
产生以下情节: