2015-06-19 4 views
2

Я новичок в R, и я пытаюсь построить горизонтальную и вертикальную помеченную дендрограмму с помощью dist() и hclust(). Я построил шесть разных типов, но не могу добавить ярлыки. Спасибо, если у кого есть предложения.Маркировка вертикальных и горизонтальных дендрограмм

Я пробовал много разных способов для ярлыка этих дендрограмм без успеха, используя as.dendrogram(), colnames(), rownames() и label(). Однако выходные дендрограммы имеют бессмысленные метки. Я пытаюсь обозначить дендрограммы «Семья» - «X22», «X4», «X75», «X87». Ниже приведены различные методы, которые были применены, безрезультатно.

Вот dataframe:

Family SBI.CV.mean 
1 X22 59.25926 
2  X4 57.40741 
3 X75 56.19918 
4 X87 59.97886 


library(dendextend) 
family1$Family <- as.factor(family1$Family) 
class(family1$Family) 
str(family1) 

family2 <- ddply(family1,.(Family), summarise, 
SBI.CV.mean = mean(SBI.CV)) 
family2 
class(family2) 

par(mfrow = c(3,3)) 
x_dist <- dist(x=family2$SBI.CV, method="euclidean") 
x_dist 
class(x_dist) 

x_dist <- read.table(header=T, text=c("X22", "X4", "X75", "X87")) 
x_dist2=as.matrix(x_dist2, labels=TRUE,) 
colnames(x_dist) <- rownames(x_dist) <- x_dist2[["X22","X4","X75","X87"]] 
x_dist2 

Этот код производит эту матрицу. Однако, это не маркирован

  1  2  3 
2 1.851852     
3 3.060077 1.208225   
4 0.719598 2.571450 3.779675 

Это мои попытки добавить ярлыки

require(graphics) 
labs=paste(c("X22", "X4", "X75", "X87"), 1:4, sep="") 
x_dist2 <- x_dist 
x_dist2 
colnames(x_dist2) <- labs 
Dendro.data <- hclust(dist(x_dist2), "euclidean") 
plot(as.dendrogram(Dendro.data), horiz=T) 

require(graphics) 
labs=paste(c("X22", "X4", "X75", "X87"), 1:4, sep="") 
x_dist3 <- x_dist 
colnames(x_dist3) <- labs 
Dendro.data <- hclust(dist(x_dist3), "ave") 
plot(as.dendrogram(x_dist3), hang=-1) 
str(Dendro.data) 

hc <- hclust(dist(family2$SBI.CV), "ave") 
plot(hc) 
plot(as.dendrogram(hc, hang=0.02), horiz = TRUE) 

dend1 <- as.dendrogram(Dendro.data) 
dend1 
dend1_mod_01 <- dend1 
dend1_mod_01 <- colour_branches(dend1_mod_01, k=2) 
col_for_labels <- c("purple","purple","orange","purple", 
"orange","dark green") 

dend_mod_01 <- color_labels(dend1_mod_01,col=col_for_labels) 
plot(Dendro.data) 
plot(dend1_mod_01) 
+0

Спасибо Тал, Ты оказал большую помощь. –

ответ

0

Насколько я понимаю, вы задаете два вопроса, и я постараюсь ответить как:

1) Как вы контролируете имена элементов в объекте dist?

Самый простой способ - управлять именами матриц/data.frame, которые используются для создания dist. Например:

> 
> x <- data.frame(value = 6:9) 
> x 
    value 
1  6 
2  7 
3  8 
4  9 
> rownames(x) 
[1] "1" "2" "3" "4" 
> # dist uses row names to indicate the relation between the items! 
> # the default is a vector of integers, as the number of items: 
> dist(x) 
    1 2 3 
2 1  
3 2 1 
4 3 2 1 
> 
> rownames(x) <- letters[1:4] 
> x 
    value 
a  6 
b  7 
c  8 
d  9 
> rownames(x) 
[1] "a" "b" "c" "d" 
> # dist uses row names to indicate the relation between the items! 
> # Now they are letters 
> dist(x) 
    a b c 
b 1  
c 2 1 
d 3 2 1 

2) Как вы контролируете имена предметов в объекте дендрограммы?

Для этого лучше всего использовать dendextend package:

> x <- data.frame(value = 6:9) 
> x 
    value 
1  6 
2  7 
3  8 
4  9 
> dist(x) 
    1 2 3 
2 1  
3 2 1 
4 3 2 1 
> hc <- hclust(dist(x)) 
> dend <- as.dendrogram(hc) 
> plot(dend) 
> # the default labels is the names in the dist: 
> labels(dend) 
[1] 1 2 3 4 
> # Using dendextend we can update them: 
> library(dendextend) 
> labels(dend) <- letters[1:4] 
> labels(dend) 
[1] "a" "b" "c" "d" 
> plot(dend) 

Я надеюсь, что это помогает.

Тал

Смежные вопросы