首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在行侧包含离散变量分数的R热图

在行侧包含离散变量分数的R热图
EN

Stack Overflow用户
提问于 2013-01-10 02:11:00
回答 1查看 518关注 0票数 1

我有几千个对少数因素的观察,根据每个因素的最小值,我将其转换为离散的1/0值,并将其绘制在热图中。2 (red=1,black=0)。这将绘制A+B+C+D为1的组合,3个因素的组合为1,2个因素的组合,等等。我希望在热图中的左侧垂直轴上绘制这些组合的分数。2:

代码语言:javascript
复制
nentries=10000
ci=rainbow(nentries)
set.seed=1
mean=10
## Generate some data (4 factors)
i = data.frame(
  a=round(abs(rnorm(nentries,mean-2))),
  b=round(abs(rnorm(nentries,mean-1))),
  c=round(abs(rnorm(nentries,mean+1))),
  d=round(abs(rnorm(nentries,mean+2)))
  )
minvalue = 10
# Discretise values to 1 or 0
m0 = matrix(as.numeric(i>minvalue),nrow=nrow(i))
# Remove rows with all zeros
m = m0[rowSums(m0)>0,]
# Reorder with 1,1,1,1 on top
ms =m[order(as.vector(m %*% matrix(2^((ncol(m)-1):0),ncol=1)), decreasing=TRUE),]
rowci = rainbow(nrow(ms))
colci = rainbow(ncol(ms))
heatmap(ms,
        Rowv=NA,
        labRow=" ",
        keep.dendro = FALSE,
        col=c("black","red"),
        RowSideColors=rowci,
        ColSideColors=colci,
        )

RowSideColors现在是一个彩虹,有和nrow(ms)一样多的颜色,我想要的是1/0组合的因子和一个图例。类似于:A+B+C+D 1%B+C+D 10%等,在RowSideColors旁边。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-17 22:25:50

如果我没理解错的话,您想要少量的行标签,每个块一个?这应该能起到作用

代码语言:javascript
复制
colnames(ms)=LETTERS[1:4]
limits=c(which(!duplicated(ms)),nrow(ms))
l=length(limits)
toname=round((limits[-l]+ limits[-1])/2)
freq=(limits[-1]-limits[-l])/nrow(ms)

rn=rep("", nrow(ms))
for(i in toname) rn[i]=paste(colnames(ms)[which(ms[i,]==1)],collapse="")
rn[toname]=paste(rn[toname], ": ", sprintf( "%.5f", freq ), "%")

heatmap(ms, Rowv=NA, labRow=rn, col=c("black","red"))

它利用您的数据已经排序的事实来找到每个块的中间(我们希望图例出现的位置),然后创建一个图例矢量,该矢量对于大多数行都是空的,并包含列名和图例应该显示的行的比例。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14243723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档