如何标记剪切树形图的终端节点?

时间:2011-08-26 02:57:10

标签: r hierarchical-clustering dendrogram dendextend

我使用下面的代码来剪切特定高度的树形图。我遇到的问题是,当我剪切树形图时,我无法弄清楚如何向节点添加标签。我怎么能剪切一个使用R程序的带有标签的树形图?

library(Heatplus)
cc=as.dendrogram(hclust(as.dist(mat),method="single"))
cutplot.dendrogram(cc,h=20)

3 个答案:

答案 0 :(得分:6)

在对?dendrogram的帮助文档进行了大量挖掘之后,我偶然发现了dendrapply函数,其中包含一个非常相似的示例。以下是您的解决方案,基于对?dendrapply中的示例的修改:

创建树形图并剪切高度h=20

dhc <- as.dendrogram(hc <- hclust(dist(USArrests), "ave"))
chc <- cut(dhc, h=20)$upper

使用newLabels定义向量,使用修改单个节点标签的函数newLab。然后将其传递给dendrapply

newLabels <- paste("Custom", 1:22, sep="_")

local({
      newLab <<- function(n) {
        if(is.leaf(n)) {
          a <- attributes(n)
          i <<- i+1
          attr(n, "label") <- newLabels[i]
        }
        n
      }
      i <- 0
    })

nhc <- dendrapply(chc, newLab)
labels(nhc)
 [1] "Custom_1"  "Custom_2"  "Custom_3"  "Custom_4"  "Custom_5"  "Custom_6" 
 [7] "Custom_7"  "Custom_8"  "Custom_9"  "Custom_10" "Custom_11" "Custom_12"
[13] "Custom_13" "Custom_14" "Custom_15" "Custom_16" "Custom_17" "Custom_18"
[19] "Custom_19" "Custom_20" "Custom_21" "Custom_22"

plot(nhc)

enter image description here

答案 1 :(得分:0)

以下是Andrie编写的修改后的解决方案,但使用了一个名为“dendextend”的新软件包,完全是为此类内容构建的。

您可以在以下网址的“使用情况”部分中看到该套餐的演示文稿和插图中的许多示例:https://github.com/talgalili/dendextend

以下是此问题的解决方案:

# define dendrogram object to play with:
dhc <- as.dendrogram(hc <- hclust(dist(USArrests), "ave"))
chc <- cut(dhc, h=20)$upper
# loading the package
require(dendextend)# let's add some color:
# change labels with a simple assignment:
labels(chc) <- paste("Custom", 1:22, sep="_")
plot(chc)

要安装软件包(因为我还没有将其上传到CRAN),请使用:

####################
## installing dendextend for the first time:

if (!require('installr')) install.packages('installr'); require('installr')
## install.Rtools() # run this if you are using Windows and don't have Rtools
require2(devtools)
install_github('dendextend', 'talgalili')
require2(Rcpp)
install_github('dendextendRcpp', 'talgalili')

最佳, 塔尔

答案 2 :(得分:-1)

cc$labels

这是树形图中所有元素的向量。

cc$labels <- myVector

您可以添加自己的矢量来更改标签