繁体   English   中英

标记圆形树状延伸树状图

[英]Labelling circular dendextend dendrogram

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

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设置更改为无济于事,并且当我在较小的玩具数据集上运行相同的过程时,不会出现此问题。

有任何想法吗?

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

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

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)

您得到的输出是这样的:

在此处输入图片说明

(现在这已在dextextend 1.6.0中自动完成,当前在github上可用-稍后也在CRAN上提供)

因此,解决此问题的方法(如果有人可以提供更多详细信息,请这样做,因为我根本不明白为什么这很重要),是在定义标签后添加第二个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)

另一个用户的提示:这不能解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM