【问题标题】:Weight of edges is not showing边缘的重量没有显示
【发布时间】:2021-02-04 10:47:22
【问题描述】:

我尝试使用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()

【问题讨论】:

    标签: python matplotlib networkx directed-graph


    【解决方案1】:

    第一个问题问得真好。欢迎使用 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)
    

    产生以下情节:

    【讨论】:

    • 非常感谢您的回答,这正是我想在互联网上找到的内容
    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2022-01-09
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多