2015-09-09 2 views
2

Я делаю серию treemaps и хочу, чтобы «А» в каждом сюжете всегда имел один и тот же цвет, а «В» на каждом сюжете всегда имеет один и тот же цвет и т. Д. .treemap [R]: как исправить назначение цвета

Размер V может быть равен 0 на некоторых участках - в этом случае я заполнил строки 0, но это не решило проблему. Может кто-нибудь помочь, пожалуйста ... Спасибо!

library(dplyr) 
library(treemap) 

#set directory 
setwd('') 

nRow = 200 

dt1 = data.frame(month = sample(month.abb, nRow, replace=T), 
       town = sample(LETTERS, nRow, replace=T), 
       count = sample(1:100, nRow, replace=T)) 

# make some towns bigger so that it's easier to see 
dt1[dt1$town=='A', 'count'] = dt1[dt1$town=='A', 'count'] + 500 
dt1[dt1$town=='B', 'count'] = dt1[dt1$town=='B', 'count'] + 400 
dt1[dt1$town=='C', 'count'] = dt1[dt1$town=='C', 'count'] + 300 
dt1[dt1$town=='D', 'count'] = dt1[dt1$town=='D', 'count'] + 200 
dt1[dt1$town=='E', 'count'] = dt1[dt1$town=='E', 'count'] + 100 

empty = data.frame(name = LETTERS, 
        count = rep(0, length(LETTERS))) 

for (i in 1:length(month.abb)){ 

     byTownEachMonth = dt1 %>% 
       filter(month == month.abb[i]) %>% 
       group_by(town) %>% 
       summarise(count = sum(count)) 

     # pad rows/towns of 0 count 
     byTownEachMonth = rbind(byTownEachMonth, 
           empty[ ! empty$town %in% byTownEachMonth$town, ]) 

     byTownEachMonth = byTownEachMonth[order(byTownEachMonth$town), ] 

     byTownEachMonth$label = paste0(byTownEachMonth$town, ' ', 
             byTownEachMonth$count) 

     png(width=800, height=600, file=paste0('tm_', month.abb[i], '.png')) 

       treemap(byTownEachMonth, 
         index = 'label', 
         vSize ='count', 
         vColor = 'town', 
         type = 'categorical', 
         inflate.labels = F)   
     dev.off()    
} 

enter image description here enter image description here

ответ

1

Вы должны установить drop.unused.levels = FALSE в вызове TreeMap. По умолчанию это TRUE.

Побочный эффект заключается в том, что легенда на каждом участке будет показывать все уровни городского фактора, даже уровни, которые не встречаются на определенном участке. Вам может понравиться или не понравиться ...

+0

большое спасибо @WhiteViking. - О грязной легенде, я решил не показывать ее, так как индекс уже показывает необходимую информацию. –