Есть несколько способов сделать это, самый простой - вероятно, применить рекурсивную функцию к узлам дендрограммы, используя dendrapply
.
Если вы вставите новую строку, чтобы назначить объект дендрограммы:
dendro <- as.dendrogram(hclust(dist(ddata), method = "average"))
, а затем создайте простую функцию, которая уменьшает высоту листовых узлов на заданную величину (d):
dropleaf <- function(x, d = 1){
if(is.leaf(x)) attr(x, "height") <- attr(x, "height") - d
return(x)
}
Функция может быть применена ко всем узлам следующим образом:
dendro <- dendrapply(dendro, dropleaf, d = 0.2)
Если вы намереваетесь построить ось, вы можете изменить масштаб графика так, чтобы самая низкая точка была сброшена до нуля, используя:
dendro <- phylogram::reposition(dendro, shift = "reset")
Затем вы можете перейти костальная часть вашего кода ..
ddata <- dendro_data(dendro)
p <- ggplot(segment(ddata)) +
geom_segment(aes(x = x, y = y, xend = xend, yend = yend)) +
theme_dendro()
print(p)
, выдающая следующий вывод: