我认为 Arhopala 的回答很好。我冒昧地更进一步,将函数assign_values_to_leaves_edgePar 添加到dendextend 包中(从版本0.17.2 开始,即now on github)。这个版本的函数比 Arhopala 的回答更加健壮和灵活,因为:
- 这是一个通用功能,可以在不同的问题/设置中工作
- 该函数可以处理其他edgePar参数(col、lwd、lty)
- 该功能提供部分向量的回收,并在需要时提供各种警告消息。
要安装 dendextend 软件包,您可以使用install.packages('dendextend'),但对于最新版本,请使用以下代码:
require2 <- function (package, ...) {
if (!require(package)) install.packages(package); library(package)
}
## require2('installr')
## install.Rtools() # run this if you are using Windows and don't have Rtools installed (you must have it for devtools)
# Load devtools:
require2("devtools")
devtools::install_github('talgalili/dendextend')
现在我们已经安装了dendextend,下面是对Arhopala 回答的第二个看法:
x<-1:100
dim(x)<-c(10,10)
set.seed(1)
groups<-sample(c("red","blue"), 10, replace=TRUE)
x.clust<-as.dendrogram(hclust(dist(x)))
x.clust.dend <- x.clust
x.clust.dend <- assign_values_to_leaves_edgePar(x.clust.dend, value = groups, edgePar = "col") # add the colors.
x.clust.dend <- assign_values_to_leaves_edgePar(x.clust.dend, value = 3, edgePar = "lwd") # make the lines thick
plot(x.clust.dend)
结果如下:
p.s.:我个人更喜欢 using pipes 进行这种类型的编码(它会得到与上面相同的结果,但更容易阅读):
x.clust <- x %>% dist %>% hclust %>% as.dendrogram
x.clust.dend <- x.clust %>%
assign_values_to_leaves_edgePar(value = groups, edgePar = "col") %>% # add the colors.
assign_values_to_leaves_edgePar(value = 3, edgePar = "lwd") # make the lines thick
plot(x.clust.dend)