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

