2011-11-08 107 views
11

我有一種情況,我正在繪製帶有類標籤的數據點的樹狀圖。 我希望看到凝聚聚類將具有相同標籤的那些聚類在一起。對標籤進行顏色編碼使得讀取這樣的樹狀圖變得容易。有沒有一種方法可以在R中使用ggdendro來實現?標籤ggdendro離開多種顏色

回答

17

偷大部分來自this post設置的...

library(ggplot2) 
library(ggdendro) 
data(mtcars) 
x <- as.matrix(scale(mtcars)) 
dd.row <- as.dendrogram(hclust(dist(t(x)))) 
ddata_x <- dendro_data(dd.row) 

p2 <- ggplot(segment(ddata_x)) + 
    geom_segment(aes(x=x, y=y, xend=xend, yend=yend)) 

...並增加了聚合因子...

labs <- label(ddata_x) 
labs$group <- c(rep("Clust1", 5), rep("Clust2", 2), rep("Clust3", 4)) 
labs 
#  x y text group 
# 1 1 0 carb Clust1 
# 2 2 0 wt Clust1 
# 3 3 0 hp Clust1 
# 4 4 0 cyl Clust1 
# 5 5 0 disp Clust1 
# 6 6 0 qsec Clust2 
# 7 7 0 vs Clust2 
# 8 8 0 mpg Clust3 
# 9 9 0 drat Clust3 
# 10 10 0 am Clust3 
# 11 11 0 gear Clust3 

...你可以使用aes(colour=)參數geom_text()爲您的標籤着色:

p2 + geom_text(data=label(ddata_x), 
       aes(label=label, x=x, y=0, colour=labs$group)) 

enter image description here

(如果你要提供你自己的顏色,你可以使用scale_colour_manual(),做這樣的事情:

p2 + geom_text(data=label(ddata_x), 
       aes(label=label, x=x, y=0, colour=labs$group)) + 
    scale_colour_manual(values=c("blue", "orange", "darkgreen")) 
+0

謝謝!我對R相對比較陌生,這對我很有幫助。 – chet

+1

運行你的代碼,我得到2個錯誤: 1)'geom_segment',它找不到'x0',但這只是通過改變'x = x,y = y,xend = xend,yend = yend'; 2)在'geom_text'中,它說:'不知道如何自動選擇類型函數對象的縮放比例。默認爲連續 錯誤data.frame(X = C(1,2,3,4,5,6,7,8,9,10,11)中,y = 0,標記=函數(X,:參數意味着。不同的行數:11,1,0'我怎樣才能修復它,因爲我有一個類似的案件處理(即着色標籤),並提供了同樣的錯誤 –

+0

@DavidePassaretti - 從Andrie德弗里斯幫助(?。 ** ** ggdendro的作者)和羅蘭(另一SO定期),我編輯的代碼,以便它與當前版本** ** ggdendro感謝爲頭工作了,這個答案是不再起作用! –