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

如何在两个igraph图中为K-means聚类的相同簇匹配颜色

解决igraph聚类可视化中同簇颜色不一致的问题

问题根源是两次K-means聚类的簇标签是独立分配的——比如第一个聚类的簇1可能对应第二个聚类的簇3,导致同组节点颜色不匹配。解决核心是对齐两个聚类的簇标签,再用统一的颜色映射。

步骤1:对齐簇标签

通过两个聚类结果的节点重叠关系,建立簇标签的映射:

# 假设cluster1是Amat聚类的簇向量,cluster2是Amat2的簇向量,节点顺序完全对应
# 生成簇的交叉重叠表
cross_table <- table(cluster1, cluster2)

# 为cluster1的每个簇找到cluster2中重叠最多的对应簇
cluster_mapping <- apply(cross_table, 1, function(x) which.max(x))

# 将cluster2的标签替换为对应的cluster1标签,实现对齐
aligned_cluster2 <- names(cluster_mapping)[match(cluster2, cluster_mapping)]
aligned_cluster2 <- as.integer(aligned_cluster2)

步骤2:统一颜色映射

定义一套固定的颜色集合,确保同一簇编号对应同一颜色:

library(RColorBrewer)
n_clusters <- length(unique(cluster1))
# 选择合适的调色板,比如Set2、Paired等
cluster_colors <- brewer.pal(n_clusters, "Set2")

步骤3:可视化对齐后的结果

用对齐后的簇标签和统一颜色绘制两个网络图:

library(igraph)

# 假设已有igraph对象g1(来自Amat)、g2(来自Amat2),节点名称为nodes
par(mfrow = c(1,2)) # 并排展示对比图

# 绘制第一个图
plot(g1, 
     vertex.color = cluster_colors[cluster1], 
     vertex.label = nodes, 
     main = "Amat 聚类结果")

# 绘制对齐后的第二个图
plot(g2, 
     vertex.color = cluster_colors[aligned_cluster2], 
     vertex.label = nodes, 
     main = "Amat2 聚类结果(颜色对齐)")

注意事项

  • 如果两个聚类的节点顺序不一致,先确保cluster1和cluster2的名称属性与节点对应(比如names(cluster1) <- nodes),再执行标签对齐。
  • 若存在簇重叠度较低的情况,可手动调整cluster_mapping来修正对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:45:59