2014-05-08 35 views
0

以下是我目前面临的挑战。使用R对数据框中的单元格进行条件着色使用R

我有一个名为data.frame“DX”

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

我希望在数据帧DX来使用数据,然后颜色根据给定的单元格中包含的值的数据帧。例如:“完成”以红色着色,空白单元格以黑色着色等)

注意我不想在单元格中看到文本,而是用户定义的颜色。最终输出将类似于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

相关问题