JLL*_*vin 4 r hierarchical-clustering dendextend
我正在尝试使用名为 dendextend 的出色 R 包来绘制树状图并根据一组先前定义的组为其分支和标签着色。我已经阅读了 Stack Overflow 中的答案以及 dendextend 小插图的常见问题解答,但我仍然不确定如何实现我的目标。
假设我有一个数据框,其中第一列包含用于聚类的个人姓名,然后是几列包含要分析的因素,最后一列包含每个人的组信息(见下表) .
individual 282856 282960 283275 283503 283572 283614 284015 group
pat15612 0 0 0 0 0 0 0 g2
pat38736 0 0 0 0 0 0 0 g2
pat38740 0 0 0 0 0 1 0 g2
pat38742 0 0 0 0 0 1 0 g4
pat38743 0 0 1 0 0 1 0 g3
pat38745 0 0 1 0 1 0 0 g4
pat38750 0 0 0 1 0 1 0 g4
pat38753 0 0 0 1 0 0 0 g3
pat40120 0 0 0 0 1 0 0 g4
pat40124 0 0 0 0 1 0 0 g4
pat40125 0 0 0 0 1 1 0 g4
pat40126 0 0 0 1 0 0 0 g4
pat40137 1 0 0 0 0 0 0 g4
pat40142 0 1 0 0 0 0 0 g5
pat46903 0 0 0 0 0 1 0 g1
pat67612 1 0 0 0 1 0 0 g1
pat67621 0 0 0 0 0 0 0 g2
pat67630 0 0 1 0 0 0 0 g2
pat67634 0 0 0 0 0 0 0 g5
pat67657 0 1 0 1 0 0 0 g5
pat67680 0 0 0 0 0 1 0 g5
pat67683 0 0 1 1 0 0 0 g6
Run Code Online (Sandbox Code Playgroud)
我如何根据每个人所属的组为代表每个人的分支和标签着色,即使它们可能聚集在不同的块中?
如果可以实现,有没有办法定义分配给每个组的颜色?
我很高兴你自己解决了这个问题。更简单的解决方案是order_value = TRUE在set函数中使用参数。例如:
library(dendextend)
iris2 <- iris[,-5]
rownames(iris2) <- paste(iris[,5],iris[,5],iris[,5], rownames(iris2))
dend <- iris2 %>% dist %>% hclust %>% as.dendrogram
dend <- dend %>% set("labels_colors", as.numeric(iris[,5]), order_value = TRUE) %>%
set("labels_cex", .5)
par(mar = c(4,1,0,8))
plot(dend, horiz = T)
Run Code Online (Sandbox Code Playgroud)
将导致(如您所见,标签的颜色基于 iris 数据集中的另一个变量“物种”):
(ps:我将一个物种出现的次数增加了两倍,以便更容易看出颜色与标签长度的关系)