【问题标题】:How to change dendrogram labels in r如何在 r 中更改树状图标签
【发布时间】:2016-02-10 05:11:14
【问题描述】:

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

我的树状图如下所示:

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

当我现在尝试更改上面指定的标签时,标签已更改,但它们在数据框中按顺序从左到右应用。如果我们假设我的原始数据框看起来像这样

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

我想要的是这样的:

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

但我实际得到的是:

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

数据的聚类和树状图的转换如下:

> d <- stringdistmatrix(df$Column1, df$Column1)
> cl <- hclust(as.dist(d))
> dend = as.dendrogram(cl)

谁能告诉我如何根据索引用另一列的值标记我的树状图?

【问题讨论】:

    标签: r label cluster-analysis dendrogram dendextend


    【解决方案1】:

    在您创建的hclust 对象cl 中,您有一个名为“order”的元素,其中包含元素在树状图中的顺序。

    如果要更改标签,则需要将新标签按相同的顺序放置(cl$order),因此“新”树状图是正确的:

    df$column2[cl$order]
    

    【讨论】:

    • 似乎有效。我不能肯定地说,因为当我使用 plot(dend) 时,我的一些标签从树状图中被切断(因为它们是“更长的”字符串)。知道我能做些什么来纠正它吗?感谢您的回答:-)
    • @sequence_hard 您可以尝试减小cex 或扩大边距(或两者兼而有之;-))
    【解决方案2】:

    The dendextend package 允许您使用以下命令直接更新树状图(以及 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)
    

    【讨论】:

    • 我一直在努力解决这个问题。当我尝试分配字符串标签(来自 df 中的列)时,它似乎不起作用。 Warning message: In `labels&lt;-.dendrogram`(`*tmp*`, value = list(name = c(4L, 9L, : The lengths of the new labels is shorter than the number of leaves in the dendrogram - labels are recycled.
    • 您能否提供一个可以重现此问题的数据和代码示例?
    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2018-05-27
    • 2017-10-15
    • 2012-12-16
    相关资源
    最近更新 更多