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

如何提取树状图(dendrogram)指定节点的所有标签及节点位置

提取树状图节点的标签与绘图位置

针对你用R生成树状图后需要提取节点标签和位置的需求,我来一步步帮你解决:

1. 提取每个节点的标签集合

树状图(dendrogram)是递归结构,叶子节点对应单个标签,内部节点对应其下所有子节点的标签集合。我们可以用dendrapply()遍历所有节点,自定义函数来提取标签:

# 你的原始代码
Ltrs <- data.frame("A" = c(3,1), "B" = c(1,1), "C" = c(2,4), "D" = c(6,6))
dend <- as.dendrogram(hclust(dist(t(Ltrs))))
plot(dend)

# 自定义函数:提取节点的标签集合
get_node_labels <- function(node) {
  if (is.leaf(node)) {
    # 叶子节点返回自身标签
    list(labels = attr(node, "label"))
  } else {
    # 内部节点递归收集所有子节点的标签
    child_labels <- unlist(lapply(node, function(child) get_node_labels(child)$labels))
    list(labels = child_labels)
  }
}

# 遍历所有节点,获取每个节点的标签
node_labels_list <- dendrapply(dend, get_node_labels)

运行后,node_labels_list里每个元素对应一个节点的标签集合——比如第一个元素是根节点的所有标签c("A", "B", "C", "D"),叶子节点则仅包含单个标签。

2. 提取节点的绘图位置

当你调用plot(dend)后,R会自动给每个节点添加绘图相关的属性(x为水平位置,y为聚类高度)。我们可以同样用dendrapply()提取这些位置信息:

# 自定义函数:提取节点的位置信息
get_node_position <- function(node) {
  list(
    x = attr(node, "x"),
    y = attr(node, "y")
  )
}

# 遍历所有节点,获取位置
node_positions_list <- dendrapply(dend, get_node_position)

这里的x对应树状图中节点的水平坐标,y对应节点的聚类高度(即合并时的距离)。

3. 整合标签与位置到数据框

为了方便后续使用,我们可以把节点的标签、x/y位置整合到一个数据框里:

# 合并信息
node_data <- data.frame(
  node_id = seq_along(node_labels_list),
  x = sapply(node_positions_list, function(x) x$x),
  y = sapply(node_positions_list, function(x) x$y),
  labels = sapply(node_labels_list, function(x) paste(x$labels, collapse = ", "))
)

# 查看结果
print(node_data)

运行后你会得到一个包含所有节点ID、位置坐标和对应标签集合的数据框,完全满足后续绘图或分析的需求。

补充说明

  • 如果只需要叶子节点的信息,可以用dendrapply()结合is.leaf()过滤:
    leaf_nodes <- dendrapply(dend, function(node) {
      if (is.leaf(node)) {
        data.frame(label = attr(node, "label"), x = attr(node, "x"), y = attr(node, "y"))
      }
    })
    leaf_data <- do.call(rbind, leaf_nodes)
    
  • 如果你不想先绘图也能获取节点高度(y值),可以直接从dendrogram节点的height属性提取,也就是attr(node, "height"),和绘图后的y值是完全一致的。

内容的提问来源于stack exchange,提问作者Jurr.Ian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:23:42