如何根据列表值或聚类结果为节点分配指定颜色?
按数值/聚类结果为节点分配颜色的可行方案
通用核心思路
- 先建立颜色-标签/数值的映射关系:可以用预设调色板,也可以自定义专属颜色
- 给每个节点匹配对应的颜色值
- 在可视化工具中传入颜色参数即可实现
1. 散点图场景(Matplotlib/Seaborn)
如果是展示聚类后的样本点,两种实现方式:
- 自动映射:用Seaborn的
hue参数直接绑定聚类标签,自动分配调色板颜色 - 手动自定义:自己指定每个簇的颜色,再批量匹配给节点
import matplotlib.pyplot as plt import seaborn as sns import numpy as np # 模拟数据:200个二维样本,3个聚类簇 X = np.random.randn(200, 2) cluster_labels = np.random.randint(0, 3, 200) # 方法1:自动分配颜色 sns.scatterplot(x=X[:,0], y=X[:,1], hue=cluster_labels, palette="viridis") plt.show() # 方法2:自定义簇颜色 color_map = {0: "#FF5733", 1: "#33FF57", 2: "#3357FF"} node_colors = [color_map[label] for label in cluster_labels] plt.scatter(X[:,0], X[:,1], c=node_colors) plt.show()
2. 图结构节点场景(NetworkX)
针对社交网络、知识图谱这类图节点,先给节点添加聚类属性,再批量匹配颜色:
import networkx as nx import matplotlib.pyplot as plt # 加载示例图 G = nx.karate_club_graph() # 模拟聚类结果:前17个节点为簇0,后17个为簇1 cluster_labels = {node: 0 if node <17 else 1 for node in G.nodes()} # 自定义颜色映射 color_map = {0: "darkred", 1: "royalblue"} node_colors = [color_map[cluster_labels[node]] for node in G.nodes()] # 绘制带颜色的图 nx.draw(G, node_color=node_colors, with_labels=True, node_size=600) plt.show()
3. 连续数值映射场景
如果是根据连续型数值(比如节点权重、中心度)分配渐变颜色,用颜色映射器实现:
import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import Normalize from matplotlib.cm import plasma # 模拟50个节点的连续数值 node_values = np.random.rand(50) # 把数值归一化到0-1区间 norm = Normalize(vmin=node_values.min(), vmax=node_values.max()) # 映射到渐变颜色 node_colors = plasma(norm(node_values)) # 绘制带颜色梯度的散点图 plt.scatter(np.random.rand(50), np.random.rand(50), c=node_colors, s=150) plt.colorbar(label="Node Value") plt.show()
内容的提问来源于stack exchange,提问作者Fehmeeda Mustafa
相关产品推荐
相关产品推荐

