使用r中的ggdendro在ggplot中为树形图添加标签

时间:2012-09-27 21:51:43

标签: r ggplot2 dendrogram hclust

如何在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))

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

通过应用以下内容,我能够在没有大量工作的情况下在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")