如何在两个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
相关产品推荐
相关产品推荐

