标记圆形dendextend树形图

时间:2017-09-15 11:20:46

标签: r dendrogram dendextend circlize

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

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)时,我得到了这个:

enter image description here

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

所以你实际上在代码中出现了两个问题: 1.标签不是唯一的。 2.在树形图对象中更新后,图表没有为标签提供足够的空间

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

circlize_dendrogram

你得到的输出是:

enter image description here

(现在在dendextend 1.6.0中自动完成,目前在github上可用 - 以及后来也在CRAN上使用)

答案 1 :(得分:-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)

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