如何在R中更改树形图标签

7

我在R中有一个树状图。它基于使用hclust进行的分层聚类。我正在使用不同的颜色着色不同的标签,但是当我尝试更改我的树状图的标签(为集群所基于的数据框的行)时,使用dendrogram = dendrogram %>% set("labels", dataframe$column),标签被替换,但位置错误,例如:

我的树状图如下所示:

 ___|___
|      _|_
|     |   | 
|     1   0
2

现在,当我尝试按照上述指定的方式更改标签时,标签会发生更改,但是它们会按照数据框中它们的顺序从左到右应用。如果我们假设我的原始数据框如下:

df:
   Column1  Column2
0     1        A
1     2        B
2     3        C

what I want to have is this:

    ___|___
   |      _|_
   |     |   | 
   |     B   A
   C

但实际得到的是:
    ___|___
   |      _|_
   |     |   | 
   |     B   C
   A   

数据的聚类和转化为树状图的过程如下:
> d <- stringdistmatrix(df$Column1, df$Column1)
> cl <- hclust(as.dist(d))
> dend = as.dendrogram(cl)

有人能告诉我如何根据索引,用另一列的值标记我的树状图吗?
2个回答

7

dendextend软件包允许您直接更新树状图(以及hclust),方法如下:

x <- c(1:5)
dend <- as.dendrogram(hclust(dist(x)))

if(!require(dendextend)) install.packages("dendextend")
library("dendextend")

labels(dend)
labels(dend) <- c(21:25)
labels(dend)

1
我一直在苦苦挣扎。当我尝试分配字符串标签(从df中的列)时,似乎不起作用。警告信息: 在`labels<-.dendrogram`(`*tmp*`, value = list(name = c(4L, 9L, : 新标签的长度比树状图中叶子节点的数量要短 - 标签被循环使用。 - Evan Zamir
你能提供一个数据和代码的例子来重现这个问题吗? - Tal Galili

5
在您创建的hclust对象cl中,有一个名为“order”的元素,其中包含元素在树状图中的顺序。
如果您想更改标签,您需要按照相同的顺序(cl$order)放置新标签,以便“新”树状图是正确的。
df$column2[cl$order]

似乎可以工作。我不能确定,因为现在当我使用plot(dend)时,我的一些标签从树状图中被切断了(因为它们是“更长”的字符串)。您有什么想法可以纠正这个问题吗?感谢您的回答 :-) - sequence_hard
1
@sequence_hard 你可以尝试减小 cex 或者扩大边距(或两者都略微调整一下;-)) - Cath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接