You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:34:38