Python matplotlib为图形每个顶点设置自定义颜色的方法
顶点独立着色实现方法
支持性说明
networkx 基于 matplotlib 绘图时,完全支持为每个顶点单独配置指定颜色,无需额外安装第三方库,仅需在绘图接口传入对应节点的颜色参数即可实现需求。
实现步骤
- 绘图前先获取图结构的固定节点顺序,避免颜色和节点对应错位
- 按照节点顺序逐一定制填充色,支持matplotlib兼容的所有颜色格式:内置颜色名、十六进制色值、RGB/RGBA元组都可使用
- 调用
nx.draw_networkx绘图时,通过node_color参数传入组装好的颜色列表即可
完整可运行代码
import networkx as nx import matplotlib.pyplot as plt class Graph: def __init__(self, edges, node_color_map=None): self._edges = edges # 存储节点名到颜色的映射关系,方便直接按节点名指定颜色 self._node_color_map = node_color_map if node_color_map else {} def visualize(self): vg = nx.Graph() vg.add_edges_from(self._edges) # 固定节点顺序,保证颜色和节点一一对应 node_list = list(vg.nodes) # 按节点顺序组装颜色列表,未指定颜色的节点默认使用浅灰色填充 node_colors = [self._node_color_map.get(node, '#cccccc') for node in node_list] # 传入node_color参数实现逐节点独立着色 nx.draw_networkx( vg, nodelist=node_list, node_color=node_colors, with_labels=True ) plt.axis('off') # 隐藏默认坐标轴,和示例效果对齐 plt.show() edges = [['A', 'B'], ['A', 'C'], ['B', 'D'], ['C', 'D'], ['C', 'E'], ['D', 'F'], ['E', 'F']] # 按节点名单独配置每个顶点的颜色,配色参考目标示例效果 custom_colors = { 'A': '#ff6b6b', 'B': '#4ecdc4', 'C': '#45b7d1', 'D': '#96ceb4', 'E': '#ffeaa7', 'F': '#dfe6e9' } G = Graph(edges, node_color_map=custom_colors) G.visualize()
关键参数说明
nodelist:显式指定绘图的节点排列顺序,必须和node_color列表长度一致、顺序对应,否则会出现颜色和节点错配的问题node_color:接收和节点顺序一一对应的颜色序列,支持所有matplotlib合法颜色值- 如果需要逐节点调整大小、边框色等属性,也可以通过
node_size、edgecolors等参数传入对应长度的序列实现自定义
目标效果参考

内容的提问来源于stack exchange,提问作者smartfool
相关产品推荐
相关产品推荐

