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

如何使用NetworkX绘制同时显示多个边属性(上下排列)的图?

解决NetworkX边标签同时显示两个属性并上下排列的问题

没问题,这事儿好办!你遇到的问题确实是因为nx.get_edge_attributes只能提取单个属性,但我们完全可以手动构建包含两个属性的标签字典,用换行符来实现上下排列的效果。

核心思路

遍历图中所有边,把每条边的mark和cable_name属性用换行符\n拼接成一个字符串,然后用这个自定义的字典来绘制边标签就行。这样matplotlib会自动识别换行符,把两个属性上下显示。

修改后的完整代码

import networkx as nx 
import matplotlib.pyplot as plt 

G = nx.Graph() 
G.add_edge(1, 2, mark='200', cable_name='К300')
# 多加一条边测试效果
G.add_edge(2, 3, mark='300', cable_name='К400')

pos = nx.spring_layout(G, scale=2) 

# 手动构建包含双属性的边标签字典
edge_labels = {}
for u, v, data in G.edges(data=True):
    # 用get方法避免边缺少属性时报错
    mark = data.get('mark', '')
    cable_name = data.get('cable_name', '')
    # 用\n实现两个属性上下排列
    edge_labels[(u, v)] = f"{mark}\n{cable_name}"

# 先绘制图的节点和边
nx.draw(G, pos, with_labels=True, nodecolor='r', edge_color='b', node_size=700, font_size=12)
# 绘制自定义边标签,可调整参数优化显示
nx.draw_networkx_edge_labels(
    G, 
    pos, 
    edge_labels=edge_labels, 
    label_pos=0.5,  # 标签放在边的中间位置
    font_size=10    # 调整标签字号适配换行
)

plt.show()

关键细节说明

  • 换行实现:通过\n拼接两个属性,matplotlib会自动将文本拆分为两行显示,完美实现上下排列的需求。
  • 鲁棒性处理:用data.get('属性名', '')代替直接取data['属性名'],这样如果某条边缺少其中一个属性,代码也不会崩溃,只会显示空字符串。
  • 显示优化:调整node_size、font_size和label_pos等参数,让整体布局更美观,标签位置更合理。

如果之后需要更复杂的标签样式(比如不同属性用不同颜色),可以考虑用matplotlib的text对象手动绘制每条边的标签,但对于你的需求来说,上面的方法已经足够简单高效了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:12:47