如何用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
相关产品推荐
相关产品推荐

