4

我使用以下代码在特定高度切割树状图。我遇到的问题是,当我切割树状图时,我无法弄清楚如何向节点添加标签。如何切割带有标签的树状图使用 R 程序?

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

3 回答 3

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)

在此处输入图像描述

于 2011-08-26T18:03:54.117 回答
0

这是针对 Andrie 所写内容的修改解决方案,但使用了一个名为“ dendextend ”的新包,专门为此类事情构建。

您可以在以下 URL 的“使用”部分中的演示文稿和小插图中看到许多示例: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')

最好的,塔尔

于 2013-12-09T03:45:54.673 回答
-1
cc$labels

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

cc$labels <- myVector

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

于 2014-01-30T11:11:04.777 回答