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

使用ggtree绘制层次聚类树状图时check_aesthetics()报错求助

问题解决与修正代码

错误原因分析

  1. 未定义匹配的total数据集:仅创建了四个单特征数据框(d/e/f/g),未合并成包含tip标签与所有特征的完整数据集,且未定义绘图中使用的total对象,导致数据匹配失败。
  2. 美学映射错误:fill=factor(total)中直接使用数据框作为映射变量,数据框无法转换为因子,且长度(7行)与树对象的内部数据(13行,含7个tip+6个内部节点)不匹配,触发check_aesthetics()错误。
  3. 标签映射错误:geom_tiplab(aes(label=total))错误地使用数据框作为标签内容,不符合绘图要求。

修正后的完整代码

1. 数据准备与聚类(保留原有逻辑,补充合并数据集)

seven_matrix <- matrix(c(10,8,15,3,
               21,15,21,6,
               8,8,10,4,
               23,17,19,8,
               12,9,10,3,
               13,10,9,3,
               9,6,7,4),nrow=7,byrow=T)

row.names(seven_matrix) <- c("A","B","C","D","E","F","G")
colnames(seven_matrix) <- c("Body_length","Tail_length","Wingspan","Beak_length")

hc <- hclust(dist(seven_matrix))
den <- as.dendrogram(hc)

clus <- cutree(hc, 4)
g <- split(names(clus), clus)

p <- ggtree(hc, linetype='dashed')
clades <- sapply(g, function(n) ggtree::MRCA(p, n))
p <- groupClade(p, clades, group_name='subtree') + aes(color=subtree)

# 合并所有特征为一个数据集,包含tip标签与聚类分组
total <- data.frame(
  label = names(clus),  # 必须包含与树tip名字匹配的label列
  Body_length = seven_matrix[names(clus),"Body_length"],
  Tail_length = seven_matrix[names(clus),"Tail_length"],
  Wingspan = seven_matrix[names(clus),"Wingspan"],
  Beak_length = seven_matrix[names(clus),"Beak_length"],
  cluster = clus  # 用于填充颜色的聚类分组变量
)

2. 修正后的绘图代码

p %<+% total + 
  layout_dendrogram() + 
  # 用聚类分组cluster作为fill映射变量,而非整个数据框
  geom_tippoint(aes(fill = factor(cluster), x = x + .5), 
                size = 5, shape = 21, color = 'black') + 
  # 显示tip的名称(A-G)
  geom_tiplab(aes(label = label), size = 3, hjust = .5, color = 'black') +
  # 显示某个特征值(这里以Body_length为例,可替换为其他特征)
  geom_tiplab(aes(label = Body_length), angle = 90, hjust = 1, offset = -10, show.legend = FALSE) + 
  scale_color_brewer(palette='Set1', breaks=1:4) +
  # 补充fill的颜色映射,与聚类分组对应
  scale_fill_brewer(palette='Set1', breaks=1:4) +
  theme_dendrogram(plot.margin=margin(6,6,80,6)) +
  theme(legend.position=c(.9, .6))

关键调整说明

  • 合并所有特征到total数据集,并添加label列确保与树的tip节点匹配,这是%<+%(数据关联)功能的核心要求。
  • 将fill=factor(total)改为fill=factor(cluster),使用聚类分组变量作为美学映射,解决长度不匹配与类型错误。
  • 明确geom_tiplab的标签内容,分别显示tip名称与特征值,避免使用数据框作为标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:20:28