719*_*016 1 axis r matrix heatmap
我根据每个因子的最小值将少数几个因素转化为离散的1/0值,然后将其绘制在热图中.2(红色= 1,黑色= 0).这绘制了例如A + B + C + D为1,3个因子的组合为1,2个因子的组合等的组合.我希望将这些组合的分数绘制在左侧垂直热图中的轴.2:
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,
)
Run Code Online (Sandbox Code Playgroud)
RowSideColors现在是一条彩虹,颜色与nrow(ms)颜色一样多,而我想要的是因子和图例的1/0组合.喜欢的东西:A+B+C+D 1%,B+C+D 10%,等,旁边RowSideColors.有任何想法吗?
如果我正确理解你的问题,你需要少量的行标签,每个块一个?这应该可以解决问题
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"))
Run Code Online (Sandbox Code Playgroud)
它使用了这样的事实:您的数据已经排序以找到每个块的中间(我们希望在哪里出现图例),然后创建一个图例向量,对于大多数行是空的,并包含列名称和比例应显示图例的行.
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |