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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:34:56