使用ggtree绘制层次聚类树状图时check_aesthetics()报错求助
问题解决与修正代码
错误原因分析
- 未定义匹配的
total数据集:仅创建了四个单特征数据框(d/e/f/g),未合并成包含tip标签与所有特征的完整数据集,且未定义绘图中使用的total对象,导致数据匹配失败。 - 美学映射错误:
fill=factor(total)中直接使用数据框作为映射变量,数据框无法转换为因子,且长度(7行)与树对象的内部数据(13行,含7个tip+6个内部节点)不匹配,触发check_aesthetics()错误。 - 标签映射错误:
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
相关产品推荐
相关产品推荐

