1

我正在尝试绘制组成数据的圆形树状图。使用以下代码:

library(dendextend)
library(circlize)
library(compositions)
data("Hydrochem")
hydro<-Hydrochem

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average")
dend <- as.dendrogram(hc)
hydro$River <- as.character(hydro$River)
labels(dend) <- hydro$River[order.dendrogram(dend)]
plot(dend)

我可以通过正确的标签顺序获得我想要的正常树状图。

但是当我跑步时circlize_dendrogram(dend),我得到了这个:

在此处输入图像描述

让我烦恼的是中间的树状图 - 当我不使用树状图的顺序作为标签时(即只是打字labels(dend) <- hydro$River),内部的树状图很好,一切看起来都很好。

我尝试更改labels_track_heightdend_track_height设置无济于事,当我在较小的玩具数据集上运行相同的过程时,不会出现此问题。

有任何想法吗?

4

2 回答 2

1

因此,您的代码中实际上存在两个问题: 1. 标签不是唯一的。2. 在树状图对象中更新标签后,绘图没有为标签提供足够的空间

第一个问题可以通过在您提供的非唯一标签上添加数字来解决,从而使它们独一无二。第二个问题的解决方案是在circlize_dendrogram函数中使用 labels_track_height 参数。这是更新后的代码(注意最后一行,不同之处在哪里):

library(dendextend)
library(circlize)
library(compositions)
data("Hydrochem")
hydro<-Hydrochem

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average")
dend <- as.dendrogram(hc)

tmp <- as.character(hydro$River)[order.dendrogram(dend)]
labels(dend) <- paste0(seq_along(tmp), "_", tmp)
plot(dend)
circlize_dendrogram(dend, labels_track_height  = 0.4)

你得到的输出是这样的:

在此处输入图像描述

(这现在在 dendextend 1.6.0 中自动完成,目前在 github 上可用 - 稍后也在 CRAN 上可用)

于 2017-09-27T02:21:00.537 回答
-1

所以,这个问题的解决方案(如果有人可以提供更多细节,请这样做,因为我真的不明白为什么这很重要)是dend <- as.dendrogram(hc)在定义标签后添加第二个调用。因此,代码如下所示:

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average")
dend <- as.dendrogram(hc)
hydro$River <- as.character(hydro$River)
labels(dend) <- hydro$River[order.dendrogram(dend)]
dend <- as.dendrogram(hc)
circlize_dendrogram(dend)

另一个用户注意:这不能解决问题。

于 2017-09-18T10:43:57.917 回答