2012-09-27 63 views
1

如何將標籤添加到ggdendro圖中?我從閱讀中意識到dendro_data,我想使用調用'labels',但找不到實際實現的示例。任何人都可以演示如何添加葉標籤到下面的例子。謝謝使用ggdendro在r中向ggplot中的樹狀圖添加標籤

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

您可以通過調用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) 
+0

非常感謝。還有一個小問題......是否有任何方法可以調整標籤,以便當掛起= 0.1時,它們將定位在靠近分支末端而不是沿着底部?謝謝。 – Elizabeth

+0

答案是肯定的,但需要大量的工作。在''ggdendro''軟件包中似乎沒有實現可變掛起,所以我們不能在沒有大量修改的情況下使用''dendro_data''。 – orizon

+0

@範圍我同意。我唯一要做的就是用'geom_text'中的'nudge_x'或'nudge_y'將它們推到離分支末尾一點的地方。 – 5th

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")