2014-05-08 2 views
0

Вот проблема, с которой я сейчас сталкиваюсь.Условная окраска ячейки в кадре данных с использованием R

У меня есть data.frame под названием «дх»

dx <- data.frame(Tasks = c('1','2','3','4'), 
        Phase1 = c('Done','Done','Done','WIP'), 
        Phase2 = c('WIP','Done','Done',''), 
        Phase3 = c('','WIP','Done','')) 

Я хотел бы использовать данные в dataframe йх, а затем цвет кадра данных на основе значения, что данная ячейка содержит. Например: «Готово» для окрашивания в красный цвет, пустые ячейки, которые должны быть окрашены в черный цвет и т. Д.)

Примечание. Я не хочу видеть текст в ячейках, а не те цвета, которые пользователь определяет. Окончательный вывод будет похож на таблицу с условной функцией, примененную в файле Excel.

enter image description here

+1

Так выход это будет право изображение? –

+0

То, что вы ищете, - это карта тепла. Посмотрите http://stackoverflow.com/questions/12998372/heatmap-like-plot-but-for-categorical-variables – Beasterfield

+0

Пример, который вы использовали, использует числовые значения и отображает тепловую карту, но в моем случае значения не являются числами для его строки, и я хотел бы связать значение строки с цветом. Надеюсь, я могу четко объяснить свою просьбу. – user2028303

ответ

3

Вот один метод, использующий функцию базового image.

dx <- data.frame(Tasks = c('1','2','3','4'), 
        Phase1 = c('Done','Done','Done','WIP'), 
        Phase2 = c('WIP','Done','Done',''), 
        Phase3 = c('','WIP','Done','')) 

ff<-factor(as.matrix(dx[,2:4]), 
    levels=c("Done","WIP",""), 
    labels=c("done","wip","-empty-") 
) 
fx<-matrix(as.numeric(ff), ncol=ncol(dx)-1) 

#use labels to assign colors 
col<-c(done="darkgreen",wip="orange","-empty-"="black") 

imgflip<-function(x) {t(x[nrow(x):1,])} 

image(imgflip(fx), 
    breaks=(1:(nlevels(ff)+1))-.5, 
    col=col[levels(ff)], 
    xaxt="n", yaxt="n" 
) 
axis(2, at=seq(0,1,length.out=nrow(dx)), labels=rev(paste("Task",dx$Tasks)), las=2) 
axis(3, at=seq(0,1,length.out=length(names(dx))-1), labels=names(dx)[-1]) 

который будет производить эту фотографию.

sample image

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