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

如何用Python的NetworkX绘制两节点间含两条边的无向图

解决NetworkX无向图中两点间多条边显示问题

你使用的nx.Graph()是无向简单图,这类图不允许两个节点间存在多条边——重复调用add_edge()只会覆盖原有边的属性,不会新增边,所以最终图里仅显示一条边。

要实现两点间多条无向边的显示,需要使用NetworkX的nx.MultiGraph()类型,它专门支持同一对节点间的多条边。以下是修正后的代码:

import networkx as nx
import matplotlib.pyplot as plt

# 替换为支持多无向边的MultiGraph
G = nx.MultiGraph()

G.add_node("A")
G.add_node("B")

# 添加两条独立的边,可携带不同属性
G.add_edge("A", "B", weight=3)
G.add_edge("A", "B", weight=5)

print(G.edges)  # 输出会包含两条边:('A', 'B', 0) 和 ('A', 'B', 1)

# 绘制图形,通过connectionstyle让两条边以弧形分开
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, font_weight="bold")
# 用connectionstyle参数设置边的弧形样式,rad控制弧度大小
nx.draw_networkx_edges(G, pos, connectionstyle="arc3,rad=0.2")

plt.show()

关键说明:

  • nx.MultiGraph():允许同一节点对之间存在多条边,每条边通过一个额外的索引(如示例中的0、1)区分,各自的属性(如weight)独立保存。
  • connectionstyle="arc3,rad=0.2":让两条边以弧形方式分开显示,避免重叠。调整rad的值可以改变弧度大小,使用负数还能改变弧形的方向。
  • 运行代码后,你会看到A、B之间清晰显示两条弧形边,打印G.edges也能确认两条边已成功添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:32:13