igraph树状图未按聚类排列顶点问题咨询
问题:igraph树状图聚类着色正常但顶点未按聚类分组排列
我用R的igraph做聚类分析,同时绘制网络图和树状图展示结果。大部分数据的两种图结果匹配,但某组数据的树状图虽然按聚类给顶点着了色,却没把同类顶点放在一起,反而几乎是按字母顺序排列的。不确定这是显示特性问题还是聚类本身出了异常,通用代码如下:
s <- graph.data.frame(s_edges, vertices = nodes_use, directed=FALSE) sc <- leading.eigenvector.community(s) V(s)$community <- membership(sc) s_sub1 <- delete_vertices(s, V(s)[community != 1]) sc1 <- leading.eigenvector.community(s_sub1) plot(s_sub1, mark.groups = communities(sc1), layout = layout_with_lgl) dendPlot(sc1)
解决思路
先确认聚类结果是否正确
直接输出membership(sc1)查看每个顶点的聚类归属,和树状图的着色对应比对。如果归属是正确的,那就是树状图的显示排序问题,而非聚类算法异常。手动调整树状图的排序逻辑
dendPlot()默认排序不一定按聚类分组,你可以自行指定排序规则,先按聚类分组,组内再按需排序:# 提取聚类成员和顶点名称 mem <- membership(sc1) v_names <- V(s_sub1)$name # 先按聚类分组,组内按名称排序(可替换为其他规则) sorted_idx <- order(mem, v_names) # 转成树状图对象并重新排序 dend_obj <- as.dendrogram(sc1) dend_obj <- reorder(dend_obj, sorted_idx) # 绘制调整后的树状图,颜色对应聚类 plot(dend_obj, col = mem[sorted_idx])调整dendPlot的参数
尝试给dendPlot()添加参数,比如mode="hclust"或者use.modularity=FALSE,部分场景下能改变树状图的排序逻辑:dendPlot(sc1, mode = "hclust")对比网络图验证
查看plot(s_sub1)里的标记组是否和membership(sc1)一致,如果网络图的分组是正确的,那百分百是树状图的显示排序问题,聚类本身没问题。
内容的提问来源于stack exchange,提问作者PSR
相关产品推荐
相关产品推荐

