我正在绘制一个组成数据的圆形树状图。使用以下代码:
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设置,但没有效果,当我在较小的玩具数据集上运行相同的过程时,不会出现这个问题。
有什么想法吗?
发布于 2017-09-27 02:21:00
因此,您实际上在代码中出现了两个问题: 1.标签不是唯一的。2.在对树状图对象中的标签进行更新之后,绘图没有给标签留出足够的空间
第一个问题可以通过向您提供的非唯一标签中添加数字来解决,从而使它们成为唯一的。第二个问题的解决方案是在labels_track_height函数中使用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)您得到的输出如下:

(这现在是在dendexmir1.6.0中自动完成的,目前可以在github上获得,稍后也可以在CRAN上使用)
发布于 2017-09-18 10:43:57
因此,这个问题的解决方案(如果有人可以提供更多的详细信息,请这样做,因为我完全不明白为什么这很重要)是在定义标签之后添加第二个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)另一个用户的注意:这并不能解决问题。
https://stackoverflow.com/questions/46238364
复制相似问题