Маркировка круговой дендекстенд дендрограммы
Я пытаюсь построить круговую дендрограмму композиционных данных. Используя следующий код:
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
настройки безрезультатны, и когда я запускаю тот же процесс для небольших наборов игрушечных данных, эта проблема не возникает.
Есть идеи?
2 ответа
Таким образом, у вас на самом деле есть две проблемы, возникающие в вашем коде: 1. Метки не уникальны. 2. На графике недостаточно места для меток после их обновления в объекте дендрограммы.
Первая проблема может быть решена путем добавления чисел к неуникальным меткам, которые вы предоставляете, что делает их уникальными. Решение для второй проблемы заключается в том, чтобы поиграть с аргументом label_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)
Выход вы получите это:
(Это теперь выполняется автоматически в dendextend 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)
ПРИМЕЧАНИЕ другого пользователя: это не решает вопрос.