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

标签 r dendrogram hclust dendextend

我想根据 hclust 函数中使用的数据帧的列中的值对树状图的分​​支进行着色。

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

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

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 列中的值的顺序从树状图的底部到顶部对颜色进行排序,但由于分支不再按该顺序,因此着色没有任何意义。我不想通过对数据帧进行排序来解决这个问题。

谢谢。

最佳答案

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

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

enter image description here

关于r - 基于数据框中列的树状图的颜色分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736471/

相关文章:

r - 将一列矩阵转换为 n x c 矩阵

r - 如何使用在hclust中使用的变量创建向量

d3.js - 树、簇、径向树和径向簇布局之间的平滑过渡

R 聚类分析和具有相关矩阵的树状图

matlab - Matlab 中的凝聚聚类

r - 绘制带有悬挂叶子的水平树状图? (右)

r - 给定距离矩阵 256x256 的聚类

r - 如何获得 glm 系数的阴影置信区间带?

r - 根据内容确定R中的文件类型

R 的 Format 函数返回奇数结果