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

如何修复NetworkX中图边宽度设置异常的问题

修复NetworkX自定义边宽度异常问题

你设置了两条边宽度为1,其余为10,但输出出现三条细边,问题出在代码的拼写错误上:

看这条边的定义:

g.add_edge(17, 19,widht=10)

这里把width拼写成了widht,导致这条边没有正确设置width属性。当你用nx.get_edge_attributes(g,'width')获取属性时,这条边不会被包含在结果里,因此widths列表的长度比实际边数少1。在绘制时,Matplotlib会循环使用width列表中的值,最后一条边会重复使用列表第一个值(也就是1),所以出现了第三条细边。

只需修正拼写错误,把widht改成width即可:

g.add_edge(17, 19, width=10)

完整修正后的代码如下:

import matplotlib.pyplot as plt
import networkx as nx

# 创建图
g = nx.Graph()

# 添加节点
nodes = range(1, 22)
g.add_nodes_from(nodes)

# 添加边(已修正拼写错误)
g.add_edge(1, 2, width=1)
g.add_edge(1, 3, width=10)
g.add_edge(2, 3, width=10)
g.add_edge(3, 4, width=10)
g.add_edge(4, 5, width=1)
g.add_edge(5, 6, width=10)
g.add_edge(5, 7, width=10)
g.add_edge(6, 7, width=10)
g.add_edge(5, 9, width=10)
g.add_edge(6, 9, width=10)
g.add_edge(7, 8, width=10)
g.add_edge(6, 10, width=10)
g.add_edge(10, 11, width=10)
g.add_edge(6, 11, width=10)
g.add_edge(11, 12, width=10)
g.add_edge(9, 10, width=10)
g.add_edge(9, 15, width=10)
g.add_edge(10, 13, width=10)
g.add_edge(12, 13, width=10)
g.add_edge(13, 14, width=10)
g.add_edge(14, 16, width=10)
g.add_edge(15, 14, width=10)
g.add_edge(9, 14, width=10)
g.add_edge(16, 17, width=10)
g.add_edge(13, 18, width=10)
g.add_edge(17, 18, width=10)
g.add_edge(17, 20, width=10)
g.add_edge(17, 19, width=10)  # 此处已修正拼写错误
g.add_edge(19, 20, width=10)
g.add_edge(18, 20, width=10)
g.add_edge(19, 21, width=10)
g.add_edge(20, 21, width=10)

widths = list(nx.get_edge_attributes(g,'width').values())

# 节点位置
pos={
    1:(13,78),
    2:(24,87),
    3:(23,77),
    4:(25,68),
    5:(27,59),
    6:(27,46),
    7:(17,49),
    8:(5,36),
    9:(42,58),
    10:(40,36),
    11:(35,31),
    12:(40,12),
    13:(61,30),
    14:(70,43),
    15:(72,55),
    16:(82,40),
    17:(83,20),
    18:(77,15),
    19:(93,14),
    20:(88,9),
    21:(97,4),
}

# 绘制图
nx.draw(g, pos, with_labels=True, node_color="orange", node_size=300, edge_color="black", width=widths)

# 设置标题并显示
plt.title('Gabriel Graph (102)')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

另外,顺便优化了节点添加的代码,用add_nodes_from代替逐个添加,更简洁。

内容的提问来源于stack exchange,提问作者Talal Tariq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:33:15