2011-11-08 21 views
11

Tôi có một tình huống trong đó tôi đang vẽ một chương trình dendrogram với các điểm dữ liệu đi kèm với nhãn lớp. Tôi muốn thấy rằng các nhóm tập hợp kết tụ có cùng một nhãn với nhau. Mã hóa màu các nhãn giúp dễ dàng đọc một chương trình dendrogram như vậy. Có cách nào chúng ta có thể đạt được điều này với ggdendro trong R?Dán nhãn ggdendro lá với nhiều màu sắc

Trả lời

17

Trộm cắp hầu hết các thiết lập từ 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)) 

... và thêm một yếu tố nhóm ...

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 

... bạn có thể sử dụng aes(colour=) lập luận để geom_text() tô màu cho các nhãn của bạn:

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

enter image description here

(Nếu bạn muốn cung cấp màu sắc của riêng bạn, bạn có thể sử dụng scale_colour_manual(), làm một cái gì đó như thế này:

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

Cảm ơn bạn! Tôi tương đối mới với R, điều này giúp tôi rất nhiều. – chet

+1

Chạy mã của bạn, tôi nhận được 2 lỗi: 1) trong 'geom_segment', nó không thể tìm thấy' x0' nhưng điều này chỉ đơn giản là cố định bằng cách thay đổi các đối số trong 'x = x, y = y, xend = xend, yend = yend'; 2) trong 'geom_text', nó nói:' Không biết cách tự động chọn tỷ lệ cho đối tượng của hàm kiểu. Mặc định liên tục Lỗi trong data.frame (x = c (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), y = 0, nhãn = hàm (x,: đối số ngụ ý khác nhau số lượng hàng: 11, 1, 0'.Làm thế nào tôi có thể sửa chữa nó? Bởi vì tôi có một trường hợp tương tự để đối phó với (tức là nhãn màu) và cung cấp các lỗi tương tự –

+0

@DavidePassaretti - Với sự giúp đỡ từ Andrie de Vries (** ggdendro ** 's tác giả) và Roland (SO khác thường xuyên), tôi đã chỉnh sửa mã để nó hoạt động với phiên bản hiện tại của ** ggdendro **. Cảm ơn những người đứng đầu rằng câu trả lời này không còn hoạt động nữa –

Các vấn đề liên quan