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

Networkx:仅为带有指定颜色属性的节点设置不同颜色

为NetworkX有向图节点实现自定义颜色与默认颜色共存的高效方案

你可以通过列表推导式结合字典的get方法,简洁高效地实现需求:为带有custcol属性的节点使用指定颜色,其余节点使用默认橙色。这种写法符合Pythonic风格,时间复杂度为O(n)(n为节点数量),完全适配数十个节点的场景。

完整实现代码

import networkx as nx
import matplotlib.pyplot as plt

G = nx.DiGraph()
G.add_edges_from([
    ('A','B'),
    ('B','C'),
    ('C','D'),
    ('D','E'),
    ('F','B'),
    ('B','G'),
    ('B','D'),
])

# 模拟算法为节点设置自定义颜色(实际场景由业务算法替代)
G.nodes['C']['custcol'] = 'red'
G.nodes['F']['custcol'] = 'green'  # 新增示例节点,验证多自定义颜色场景

DEFAULT_COLOR = "orange"
NXDOPTS = {
    "edge_color": "powderblue",
    "node_size": 400,
    "width": 2,
}

# 生成与节点顺序对应的颜色列表:存在custcol则用该值,否则用默认色
node_colors = [G.nodes[node].get('custcol', DEFAULT_COLOR) for node in G.nodes()]

# 绘图时传入颜色列表
nx.draw(G, with_labels=True, node_color=node_colors, **NXDOPTS)
plt.show()

核心逻辑说明

  • 利用G.nodes()遍历所有节点,保证颜色列表的顺序与NetworkX绘图时的节点顺序完全匹配,避免颜色错位
  • 使用dict.get(key, default)方法:如果节点存在custcol属性则返回其值,否则返回默认橙色,避免直接索引引发KeyError
  • 列表推导式是Python中处理序列生成的高效、简洁写法,可读性强且执行效率高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:18:10