使用NetworkX从Pandas DataFrame构建有向图无法显示边权重怎么办?
解决NetworkX有向图边权重不显示的问题
你代码里的核心问题是用错了函数:nx.draw_networkx_labels是用来设置节点标签的,要显示边的权重,得用专门的nx.draw_networkx_edge_labels函数。
直接给你修正后的完整代码,关键改动已经标出来了:
import networkx as nx import matplotlib.pyplot as plt # 假设你的df已经定义完成 G = nx.from_pandas_edgelist(df, source='A', target='B', create_using=nx.DiGraph(), edge_attr='Weight') # 这里直接指定edge_attr,权重会自动作为边属性加入 pos = nx.circular_layout(G, scale=1) # 绘制基础图结构(节点、边、节点标签) nx.draw(G, pos, with_labels=True, node_size=300, edge_color='black') # 绘制边权重——这一步是核心修正 nx.draw_networkx_edge_labels( G, pos, edge_labels=nx.get_edge_attributes(G, 'Weight'), label_pos=0.5, # 控制标签在边的中间位置(0是起点,1是终点) font_size=8 # 多边场景下缩小字体避免重叠 ) plt.show()
额外补充两个实用小技巧:
- 如果多个同方向的边标签重叠,可以调整
label_pos参数(比如设为0.4或0.6),让标签错开位置 - 也可以给标签加半透明背景,提升可读性:
bbox=dict(facecolor='white', edgecolor='none', alpha=0.7)
内容的提问来源于stack exchange,提问作者kenny
相关产品推荐
相关产品推荐

