Python中为网络图添加带权重边:解决生成全黑图问题
解决NetworkX绘制有向权重图全黑的问题
问题原因
nx.from_pandas_edgelist默认生成无向图,不符合你展示有向连接的需求- 先后调用
nx.draw()和nx.draw_networkx_edges(),导致边被重复绘制叠加,最终显示全黑 - 原始权重数值可能过大,直接作为边宽会导致线条过粗,破坏可视化效果
修正后的代码
import networkx as nx import matplotlib.pyplot as plt # 创建有向图,指定create_using参数 G = nx.from_pandas_edgelist(df_new, source='SourceNode', target='target', edge_attr='Weight', create_using=nx.DiGraph()) # 对权重做归一化缩放,避免数值过大导致边过粗 max_weight = max(d['Weight'] for _, _, d in G.edges(data=True)) edge_width = [d['Weight'] / max_weight * 5 for _, _, d in G.edges(data=True)] # 5为缩放系数,可按需调整 # 计算节点布局 pos = nx.kamada_kawai_layout(G) # 绘制节点(指定edgelist=[],避免默认绘制边) nx.draw(G, pos=pos, with_labels=True, node_color='lightblue', node_size=1500, font_size=10, edgelist=[]) # 绘制有向边,设置宽度、箭头样式 nx.draw_networkx_edges(G, pos=pos, width=edge_width, arrowstyle='->', arrowsize=15, edge_color='gray') # 展示图形 plt.show()
关键调整说明
- 添加
create_using=nx.DiGraph()创建有向图,准确体现SourceNode到target的指向关系 - 调用
nx.draw()时设置edgelist=[],避免默认绘制边,解决重复叠加变黑的问题 - 对权重做归一化处理,保证边的粗细比例合理,不会因原始数值过大导致线条过粗
- 增加节点颜色、边颜色、箭头样式等参数,提升图形的可读性和美观度
内容的提问来源于stack exchange,提问作者Shapa
相关产品推荐
相关产品推荐

