Добавяне на етикети към дендрограма в ggplot с помощта на ggdendro в r

Как мога да добавя етикети към диаграма на ggdendro? От четенето на ?dendro_data разбирам, че предполагам да използвам „етикетите“ на повикването, но не мога да намеря пример за действително изпълнение. Може ли някой да демонстрира как се добавят етикети на листа към примера по-долу. Благодаря ти

require(ggplot2)

hc <- hclust(dist(USArrests), "ave")
dhc <- as.dendrogram(hc,hang=0.1)
ddata <- dendro_data(dhc, type="rectangle")
ggplot(segment(ddata)) + geom_segment(aes(x=x, y=y, xend=xend, yend=yend))

person Elizabeth    schedule 27.09.2012    source източник


Отговори (2)


Можете да добавяте листови етикети с извикване към geom_text(), като използвате рамката с данни, генерирана от label(ddata). Също така разширих обхвата на графиката, използвайки scale_y_continuous, така че етикетите да не са отрязани.

p <- ggplot(segment(ddata)) + geom_segment(aes(x=x, y=y, xend=xend, yend=yend))
p + geom_text(aes(x = x, y = y, label = label, angle = -90, hjust = 0), data= label(ddata)) +
  scale_y_continuous(expand = c(0.3, 0))

Може обаче да е за предпочитане да използвате ggdendrogram(), освен ако не ви харесва начинът, по който се показват тези етикети:

ggdendrogram(ddata)
person orizon    schedule 28.09.2012
comment
Много благодаря. Само още един мъничък въпрос.... има ли някакъв начин да настроите етикетите така, че когато hang=0.1 те да бъдат разположени близо до краищата на клоните, за да се носят, а не навсякъде по дъното? Благодаря. - person Elizabeth; 28.09.2012
comment
Отговорът е да, но това ще изисква значителна работа. Променливата hang изглежда изобщо не е внедрена в пакета ggdendro, така че не можахме да използваме dendro_data без тежка модификация. - person orizon; 28.09.2012
comment
@orizon Съгласен съм. Единственото, което успявам, е да ги отдалеча малко от окончанията на разклоненията с nudge_x или nudge_y в geom_text. - person 5th; 19.07.2017

Успях да начертая висящи дендрограми в ggdendro без значителна работа, като приложих следното. Просто трябва да конструирате рамка с данни от етикетите, която също така съдържа позициите на листата. Това се прави чрез филтриране на точките, за да се вземат само цели числа.

# tree is a an extracted dendro_data() object.
label_data <- bind_cols(filter(segment(tree), x == xend & x%%1 == 0), label(tree))

ggplot() + 
geom_segment(data=segment(tree), aes(x=x, y=y, xend=xend, yend=yend)) +
geom_text(data=label_data, aes(x=xend, y=yend, label=label, hjust=0, color = LT), size=2) +
coord_flip() + 
scale_y_reverse(expand=c(0.2, 0)) +
theme_bw() +
theme(panel.border = element_blank(),
      panel.grid.major = element_blank(), 
      panel.grid.minor = element_blank(),
      axis.line = element_blank(),
      axis.title = element_blank(),
      axis.text = element_blank(),
      axis.ticks = element_blank(),
      legend.position = "None") 
person Daniel Cook    schedule 28.09.2015