2015-12-31 4 views
1

Первоначально я пытался добавить горизонтальную панель цвета цвета к графику дендрограммы (не ко всей карте тепла), используя цветные_бары из dendextend.Цветная диаграмма области дендрограммы

Код ниже (СПАСИБО за вашу помощь Tal!) Работает очень хорошо. Остается только вопрос о том, как управлять расстоянием бара от ярлыков листьев и ширины штанги?

Ниже приведен пример, данные и код
данных (4 переменные, 5 случаев)

df <- read.table(header=T, text="group class v1 v2 
1   A   1   3.98   23.2 
2   A   2   5.37   18.5 
3   C   1   4.73   22.1 
4   B   1   4.17   22.3 
5   C   2   4.47   22.4 
") 

car_type <- factor(df[,c(1)]) # groups codes (A,B,C) 
cols_4 <- heat.colors(3) 
col_car_type <- cols_4[car_type] 
matrix<-data.matrix(df[,c(3,4)]) 
rnames<-df[,2] 
row.names(matrix)<-rnames 
matrix<-data.matrix(df[,c(3,4)]) 
row.names(matrix)<-rnames 
dend<-hclust(dist(matrix)) 
labels_colors(dend) <- col_car_type[order.dendrogram(dend)] # Error in order.dendrogram(dend) : 'order.dendrogram' requires a dendrogram 
# But I dont think the line above is doing anything so it can be removed... 
plot(dend) 
colored_bars(col_car_type, dend) 
+1

Привет AussieAndy, Спасибо за сообщение. Теперь я вижу проблему с функцией, которую я исправлю на следующей неделе. В то же время, можете ли вы, пожалуйста, обновить свой вопрос небольшим самодостаточным примером дендрограммы и групп, чтобы продемонстрировать функцию для вас, когда она работает? Благодарю. –

+0

Спасибо заранее! Я попытаюсь сохранить его простым и использовать параллельно, так как мой набор данных имеет более 700 переменных и 200+ случаев. Использует данные mtcars. То, что я пытаюсь сделать, чтобы создать дендрограмму (не тепловую карту) mpg, qsec, cyl, gear для всех автомобилей (например, модели Merc280C, Merc 240D и т. Д.), А затем иметь горизонтальный бар ниже с разными цветами для Mercedes , Mazda, Toyota и т. Д., Чтобы вы могли быстро увидеть, что, например, все автомобили Mercedes собираются вместе. – AussieAndy

+0

Я знаю, что могу создать столбец с метками Mercedes, Mazda, Toyota, но и применить его к дендрограмме, но это не позволит быстро оценить (имейте в виду, что у меня более 200 случаев («автомобили»). Мои извинения, если это не совсем что вы ожидали! – AussieAndy

ответ

3

Это теперь можно сделать с помощью dendextend version 1.1.4 (в настоящее время доступны на GitHub, а также будет находиться на CRAN в в следующем месяце или около того).

Во-первых, чтобы установить последнюю версию dendextend вы можете использовать:

install.packages.2 <- function (pkg) if (!require(pkg)) install.packages(pkg); 
install.packages.2('devtools') 
devtools::install_github('talgalili/dendextend') 

Вот пример использования mtcars:

## mtcars example 

# Create the dend: 
dend <- as.dendrogram(hclust(dist(mtcars))) 

# Create a vector giving a color for each car to which company it belongs to 
car_type <- rep("Other", length(rownames(mtcars))) 
is_x <- grepl("Merc", rownames(mtcars)) 
car_type[is_x] <- "Mercedes" 
is_x <- grepl("Mazda", rownames(mtcars)) 
car_type[is_x] <- "Mazda" 
is_x <- grepl("Toyota", rownames(mtcars)) 
car_type[is_x] <- "Toyota" 
car_type <- factor(car_type) 
n_car_types <- length(unique(car_type)) 
cols_4 <- colorspace::rainbow_hcl(n_car_types, c = 70, l = 50) 
col_car_type <- cols_4[car_type] 

# extra: showing the various clusters cuts 
k234 <- cutree(dend, k = 2:4) 

# color labels by car company: 
labels_colors(dend) <- col_car_type[order.dendrogram(dend)] 
# color branches based on cutting the tree into 4 clusters: 
dend <- color_branches(dend, k = 4) 

### plots 
par(mar = c(12,4,1,1)) 
plot(dend) 
colored_bars(cbind(k234[,3:1], col_car_type), dend, rowLabels = c(paste0("k = ", 4:2), "Car Type")) 

# horiz version: 
par(mar = c(4,1,1,12)) 
plot(dend, horiz = TRUE) 
colored_bars(cbind(k234[,3:1], col_car_type), dend, rowLabels = c(paste0("k = ", 4:2), "Car Type"), horiz = TRUE) 
legend("topleft", legend = levels(car_type), fill = cols_4) 

enter image description here

+0

Я знаю, что это уже старый вопрос ... Но, как назначить определенный цвет конкретному классу (например, Mazda-yellow, Mercedes-blue, Other-green , Toyota-красный). У меня может быть момент CRAFT, но я не знаю, как это сделать ... Спасибо заранее! – AussieAndy

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

  • Нет связанных вопросов^_^