【问题标题】:R heatmap with fractions of discretise variables in row sideR热图在行侧具有离散变量的分数
【发布时间】:2012-12-24 00:03:15
【问题描述】:

我对少数几个因素进行了数千次观察,我根据每个因素的最小值将其转化为离散的 1/0 值,并将其绘制在热图中。2(红色 = 1,黑色 = 0)。这绘制了 A+B+C+D 为 1、3 个因素的组合为 1、2 个因素的组合等的组合。我希望将这些组合的分数绘制在左侧垂直heatmap.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,
        )

RowSideColors 现在是具有 nrow(ms) 种颜色的彩虹,而我希望拥有因子和图例的 1/0 组合。类似于:A+B+C+D 1%B+C+D 10% 等,位于 RowSideColors 旁边。有什么想法吗?

【问题讨论】:

  • 那么你想要添加一个图例?

标签: r matrix axis heatmap


【解决方案1】:

如果我正确理解您的问题,您需要少量的行标签,每个块一个吗?这应该可以解决问题

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"))

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

【讨论】:

  • 太棒了!这正是我想要的!
猜你喜欢
  • 2021-02-06
  • 2021-06-25
  • 2012-06-27
  • 1970-01-01
  • 2015-05-14
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
相关资源
最近更新 更多