我正在尝试绘制成分数据的圆形树状图。使用以下代码:
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_height
和dend_track_height
设置无效,当我在较小的玩具数据集上运行相同的过程时,不会出现此问题。
有什么想法吗?
答案 0 :(得分:1)
所以你实际上在代码中出现了两个问题: 1.标签不是唯一的。 2.在树形图对象中更新后,图表没有为标签提供足够的空间
第一个问题可以通过在您提供的非唯一标签上添加数字来解决,从而使它们具有唯一性。第二个问题的解决方案是使用Schedule
函数中的labels_track_height参数。这是更新的代码(注意最后一行,差异在哪里):
circlize_dendrogram
你得到的输出是:
(现在在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)
另一位用户注意:这不能解决问题。