2015-11-09 25 views
5

Tôi có một dendrogram trong R. Nó được dựa trên phân cụm hierachical sử dụng hclust. Tôi tô màu các nhãn khác nhau về màu sắc khác nhau, nhưng khi tôi thử thay đổi nhãn của chương trình tính toán của tôi (thành các hàng của khung dữ liệu cụm dựa trên) bằng cách sử dụng dendrogram = dendrogram %>% set("labels", dataframe$column) các nhãn được thay thế, nhưng ở vị trí sai. Một ví dụ:Làm thế nào để thay đổi nhãn dendrogram trong r

dendrogram của tôi trông như thế này:

___|___ 
|  _|_ 
|  | | 
|  1 0 
2 

khi tôi bây giờ hãy thử thay đổi nhãn như đã nêu ở trên, các nhãn được thay đổi, nhưng chúng được áp dụng từ trái sang phải theo thứ tự của họ trong dataframe . Nếu chúng ta giả dataframe ban đầu của tôi trông như thế này

df: 
    Column1 Column2 
0  1  A 
1  2  B 
2  3  C 

những gì tôi muốn có điều này là:

___|___ 
    |  _|_ 
    |  | | 
    |  B A 
    C 

Nhưng những gì tôi thực sự nhận được là:

___|___ 
    |  _|_ 
    |  | | 
    |  B C 
    A 

clustering của dữ liệu và sự biến đổi của họ thành chương trình dendrogram được thực hiện như sau:

> d <- stringdistmatrix(df$Column1, df$Column1) 
> cl <- hclust(as.dist(d)) 
> dend = as.dendrogram(cl) 

Ai đó có thể cho tôi biết làm thế nào tôi có thể gắn nhãn dendrogram của tôi với các giá trị của cột khác dựa trên chỉ mục?

Trả lời

3

Trong đối tượng hclust bạn đã tạo, cl, bạn có một phần tử có tên là "đơn đặt hàng" có chứa thứ tự các thành phần nằm trong chương trình dendrogram.

Nếu bạn muốn thay đổi nhãn, bạn cần phải đặt các nhãn mới theo thứ tự (cl$order), do đó "mới" dendrogram là đúng:

df$column2[cl$order] 
+0

Dường như hoạt động. Tôi không thể nói chắc chắn như bây giờ một số nhãn của tôi được cắt bỏ từ dendrogram (vì chúng là 'dài' dây) khi tôi sử dụng âm mưu (dend). Bất kỳ ý tưởng những gì tôi có thể làm để sửa chữa điều đó? Cảm ơn câu trả lời của bạn :-) –

+1

@sequence_hard bạn có thể thử giảm 'cex' hoặc phóng to lề (hoặc một chút của cả hai ;-)) – Cath

+1

một downvote? tại sao không. Nhưng "tại sao" tuy nhiên lại quan tâm đến tôi ... – Cath

4

The dendextend package cho phép bạn trực tiếp cập nhật dendrograms (cũng như hclust), bằng cách sử dụng như sau:

x <- c(1:5) 
dend <- as.dendrogram(hclust(dist(x))) 

if(!require(dendextend)) install.packages("dendextend") 
library("dendextend") 

labels(dend) 
labels(dend) <- c(21:25) 
labels(dend) 
Các vấn đề liên quan