首页 文章

类似热图的情节,但对于分类变量

提问于
浏览
14

我有大约50个人的三个因素(set1,set2和set3) . set1,set2和set3的值为“A”,“B”,“C” . 我想制作一个类似热图的这些数据图,但让图例显示与值相关的颜色(例如,A ='红色',B ='蓝色',C ='黑色') . 有什么建议?

谢谢 .

2 回答

  • 23

    我决定用ggplot2来解决这个问题很容易(对我来说无论如何):

    #recreate a data set
    dat <- data.frame(person=factor(paste0("id#", 1:50), 
        levels =rev(paste0("id#", 1:50))), matrix(sample(LETTERS[1:3], 150, T), ncol = 3))
    
    library(ggplot2); library(reshape2)
    dat3 <- melt(dat, id.var = 'person')
    ggplot(dat3, aes(variable, person)) + geom_tile(aes(fill = value),
       colour = "white") + scale_fill_manual(values=c("red", "blue", "black"))
    

    enter image description here

  • 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

相关问题