Маркировка круговой дендекстенд дендрограммы

Я пытаюсь построить круговую дендрограмму композиционных данных. Используя следующий код:

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)

ПРИМЕЧАНИЕ другого пользователя: это не решает вопрос.

Другие вопросы по тегам