类似热图的图,但用于分类变量

Posted

技术标签:

【中文标题】类似热图的图,但用于分类变量【英文标题】:heatmap-like plot, but for categorical variables 【发布时间】:2012-10-11 11:48:25 【问题描述】:

我为大约 50 个人中的每一个人设置了三个因素(set1、set2 和 set3)。 set1、set2 和 set3 的值为“A”、“B”、“C”。我想为这些数据制作一个类似热图的图,但让图例显示与值相关的颜色(例如,A='red'、B='blue'、C='black')。有什么建议吗?

谢谢。

【问题讨论】:

【参考方案1】:

我认为用 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"))

【讨论】:

感谢您提供了一个不错的解决方案,我已经投了赞成票,但我认为库(reshape)中有一个错字,reshape 中缺少“s” 谢谢!我们是否可以有多个图例,实际上每行一个图例,因为我有分类变量,对于不同的行意味着不同,但我只有四行。 是的,但我不知道怎么做。我鼓励你提出一个新问题。【参考方案2】:

也可以使用基本图形制作类似的图。这是使用基本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])

这将产生这张图片。

【讨论】:

以上是关于类似热图的图,但用于分类变量的主要内容,如果未能解决你的问题,请参考以下文章

收藏 | 机器学习分类算法

收藏 | 机器学习分类算法

如何分别为不同的列创建热图?

基于非数字第三变量的热图轴重新排序 - ggplot2

如何网格化面板图,使其在 R 中的 ggplot 中具有分类变量和不同的 x 变量

热图中带有分类数据的标点位置(海床)