基于数据框中列的树状图的颜色分支

时间:2019-04-17 21:51:12

标签: r dendrogram hclust dendextend

我想根据hclust函数中使用的数据框的一列中的值为树状图的分​​支着色。

在您将此问题标记为重复之前,请按照与此question链接的此question中的操作进行操作。请注意,答案中实际上从未完全解决此问题。根据树状图的拓扑为分支着色很容易,但是我无法弄清楚如何根据hclust函数中使用的数据框中的列为分支着色。

我尝试以两种非常相似的方式使用dendextend包:

library(dendextend)
par(mar = c(2,1,0,8)) #make sure the whole plot is on the page
hc <- hclust(dist(mtcars)) #cluster dataframe based on distance
dend <- as.dendrogram(hc) #use dendextend to create dendrogram
dend2 <- color_branches(dend, col = mtcars$cyl) #attempt but fail at coloring branches
plot (dend2, horiz = TRUE) #plot dendrogram

dend3 <- assign_values_to_leaves_edgePar(dend, value = mtcars$cyl, edgePar = "col") #attempt but fail at coloring branches
plot (dend3, horiz = TRUE) #plot dendrogram

mtcars$cyl代替factor(mtcars$cyl也不能解决问题。

这两种解决方案均会产生未正确着色的树状图。 enter image description here 似乎是根据cyl列中值的顺序从树状图的底部到顶部对颜色进行排序,但是由于分支不再按该顺序排列,因此着色没有任何意义。我不希望对数据框进行排序,以解决此问题。

谢谢。

1 个答案:

答案 0 :(得分:2)

您需要按照树状图的叶子顺序排列颜色。您可以使用labels()提取叶子上使用的名称

dend2 <- color_branches(dend, col=mtcars[labels(dend),"cyl"])

enter image description here