标记圆形树状延伸树状图
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_height
和 dend_track_height
设置但无济于事,当我 运行 在较小的玩具数据集上执行相同的过程时,不会出现此问题。
有什么想法吗?
因此,这个问题的解决方案(如果有人可以提供更多详细信息,因为我根本不明白为什么这很重要)是在定义标签后添加第二个 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)
另一位用户的注意:这不能解决问题。
所以你的代码实际上有两个问题:
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 上可用)
我正在尝试绘制成分数据的圆形树状图。使用以下代码:
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
设置但无济于事,当我 运行 在较小的玩具数据集上执行相同的过程时,不会出现此问题。
有什么想法吗?
因此,这个问题的解决方案(如果有人可以提供更多详细信息,因为我根本不明白为什么这很重要)是在定义标签后添加第二个 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)
另一位用户的注意:这不能解决问题。
所以你的代码实际上有两个问题: 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 上可用)