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

求助:NetworkX中无法绘制(i,i)形式的自环边

解决NetworkX MultiGraph自环边不显示的问题

嘿,别担心!你添加自环边的操作本身完全没问题,NetworkX默认的绘图工具只是对自环的支持不够直观,不是你代码写错啦😉

先确认自环边已经成功添加

首先可以先验证一下你的自环边是不是真的在图里——毕竟新手容易怀疑自己的操作,咱们先打消这个顾虑:

import networkx as nx

# 创建你的多图对象
G = nx.MultiGraph()
G.add_edge(2, 2)  # 添加自环边

# 打印图里的所有边
print("当前图中的边:", list(G.edges()))

运行这段代码后,你应该能看到输出 [(2, 2)],这说明自环边已经被正确添加到图里了,只是绘图的时候没显示出来而已。

让自环边显示出来的两种方法

NetworkX的默认nx.draw()函数对自环的渲染比较保守,咱们可以通过调整参数或者手动绘制自环来解决:

方法1:用nx.draw_networkx()并设置connectionstyle

nx.draw_networkx()比基础的nx.draw()有更多自定义选项,其中connectionstyle参数可以控制边的弯曲方式,刚好能让自环显示出来:

import matplotlib.pyplot as plt

# 绘制图形,指定自环的弧度
nx.draw_networkx(G,
                 with_labels=True,  # 显示节点标签
                 node_size=1500,    # 调大节点尺寸,避免自环和节点重叠
                 font_size=12,      # 调整标签字体大小
                 connectionstyle='arc3, rad=0.1')  # rad控制自环的弯曲程度,数值越大弧度越明显

plt.show()

方法2:手动单独绘制自环边

如果习惯用nx.draw(),可以先绘制普通节点和边,再单独把自环边画上去:

import matplotlib.pyplot as plt

# 先设置节点布局(spring_layout是常用的力导向布局)
pos = nx.spring_layout(G)

# 绘制节点和普通边
nx.draw(G, pos, with_labels=True, node_size=1500)

# 单独绘制自环边,指定弧度
nx.draw_networkx_edges(G, pos, edgelist=[(2, 2)], connectionstyle='arc3, rad=0.2')

plt.show()

额外小技巧:MultiGraph的多条自环

如果你在同一个节点上添加多条自环(比如多次调用G.add_edge(2,2)),可以给每条自环设置不同的rad值,让它们分开显示不重叠:

# 添加三条自环边
G.add_edge(2, 2)
G.add_edge(2, 2)
G.add_edge(2, 2)

pos = nx.spring_layout(G)
nx.draw_networkx(G, pos, with_labels=True, node_size=2000)

# 给每条自环设置不同的弧度(正负值可以让自环在节点两侧)
nx.draw_networkx_edges(G, pos, edgelist=[(2,2,0)], connectionstyle='arc3, rad=0.3')
nx.draw_networkx_edges(G, pos, edgelist=[(2,2,1)], connectionstyle='arc3, rad=-0.3')
nx.draw_networkx_edges(G, pos, edgelist=[(2,2,2)], connectionstyle='arc3, rad=0.1')

plt.show()

总的来说,你完全没做错操作,只是NetworkX的默认绘图逻辑没把自环展示出来,调整一下参数就能看到啦!

内容的提问来源于stack exchange,提问作者Héctor Alonso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:35