树状图边缘(分支)颜色与尖端(叶)颜色相匹配(猿包)

Dendrogram edge (branch) colors to match tip (leaf) colors (ape package)

我正在尝试使用 ape 包中的 plot.phylo 命令为 R 中系统发育型图的边缘(线)添加颜色。这个例子是针对 "fan" 类型的图,尽管我希望这种方法与 "phylogram type" 或其他类型的图相同。

library('ape')
hc <- hclust(dist(USArrests), "ave")
plot(as.phylo(hc), type="fan")

根据一组组为提示(标签)添加颜色使用 tip.color 选项结合 cutree 命令没有问题。

hc.cuts <- cutree(hc, k=5)
plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts])

edge.color 选项定义边缘的颜色,但在需要多种颜色时不是以登录方式。

plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts], edge.color=rainbow(5)[hc.cuts])

但是,一旦树状图的那个分支被指定给给定的组,我希望边缘与末端尖端颜色相匹配。在给定的示例中,对于红色和蓝色组,第一层边缘将保持黑色(因为它朝向两组:红色和蓝色),但超出此范围的边缘将与最终的尖端颜色相同。

我怀疑关键在于弄清楚 as.phylo 对象中 $edge 值的顺序,但我自己想不通。谢谢

正如@maj 在评论中建议的那样,如果您不介意使用该软件包,dendextend 可以帮助您。它非常灵活并且有大量的文档和插图。

这是一个从 dendextend FAQ 改编而来的示例。

# install.packages("dendextend")
# install.packages("circlize")

library(dendextend)
library(circlize)

hc <- hclust(dist(USArrests))
dend <- as.dendrogram(hc)

num_clades <- 5

dend <- dend %>% 
  color_branches(k=num_clades, col=rainbow) %>% 
  color_labels(k=num_clades, col=rainbow)

par(mar = rep(0, 4))
circlize_dendrogram(dend, dend_track_height = 0.8) 

输出