树形图边缘(分支)颜色匹配尖端(叶子)颜色(猿包装)

时间:2015-09-07 11:57:20

标签: r dendrogram phylogeny dendextend

我正在尝试使用ape包中的plot.phylo命令为R中的系统发育类型图的边(线)添加颜色。这个例子是一个“粉丝”类型的情节,虽然我希望这种方法与“phylogram类型”或其他类似。

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

将tip.color选项与cutree命令结合使用,可以根据一组组向tip(标签)添加颜色没有问题。

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

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

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

然而,一旦树形图的分支指向给定组,我希望边缘匹配终端尖端颜色。在给出的例子中,朝向红色&amp;蓝色组,边缘的第一层将保持黑色(因为它朝向两组:红色和蓝色),但超出此范围的边缘将与最终的尖端颜色相同。

我怀疑关键在于找出as.phylo对象中$ edge值的顺序,但我自己无法想象。感谢。

1 个答案:

答案 0 :(得分:5)

正如@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) 

输出

enter image description here