我有大约50个人的三个因素(set1,set2和set3) . set1,set2和set3的值为“A”,“B”,“C” . 我想制作一个类似热图的这些数据图,但让图例显示与值相关的颜色(例如,A ='红色',B ='蓝色',C ='黑色') . 有什么建议?
谢谢 .
我决定用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"))
也可以使用基本图形进行类似的绘图 . 这是使用基本 image 函数的一种方法 . 此示例具有分类响应而不是数字响应 .
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])
这将产生这张照片 .
2 回答
我决定用ggplot2来解决这个问题很容易(对我来说无论如何):
也可以使用基本图形进行类似的绘图 . 这是使用基本
image
函数的一种方法 . 此示例具有分类响应而不是数字响应 .这将产生这张照片 .