如何通过定义范围(例如-2到2)来使gplots heatmap.2中的颜色饱和?

时间:2012-06-25 21:34:25

标签: r colors range heatmap

我有一张gplots heatmap.2的表格,其值介于-6到6之间。有什么办法可以设置-2到2的颜色饱和度吗?例如处理任何< -2为-2,> 2分别为2。提前谢谢。

heatmap.2(eset, col = greenred(100), scale="none", key=TRUE, symkey=FALSE, density.info="none", trace="none", cexRow=0.9, cexCol=0.9)

示例数据:

ID  Class   X1373   X1374   X1375   X1376   X1377   X1378   X1379   X1380   X1381   X1382   X1383   X1384   X1385
A1  LC  -1.33   -3.56   -1.61   -0.71   -4.44   -0.76   2.36    0.64    1.2 0.32    0.02    2.97    0.98
A2  LC  -0.71   0.59    -1.13   -0.62   -2.69   0.02    -0.14   0.16    1.04    0.12    0.11    0.02    1
A3  LC  -1.45   -4.07   -1.09   -1.7    -4.61   0.84    1.62    2.81    0.17    4   0.05    1.6 1.18
A4  LC  -0.11   -2.63   -0.26   -1.42   -1.61   4.38    0.03    1.09    0.75    0.39    4.64    6.03    -1.39
A5  LC  -0.78   -1.78   -0.86   -4.58   -5.96   -0.25   -1.31   -0.85   2.39    0.27    0.13    -0.63   2.28
A6  LC  -0.94   1.5 -1.59   -2.95   -3.42   0.06    1.46    1.07    0.76    0.46    0.79    2.03    1.57
A7  LC  -0.08   0.06    -0.39   0.21    -0.65   -0.38   1.12    0.64    1.19    2.86    0.53    -0.29   0.38
A8  LC  -1.55   -1.45   -1.25   -1.53   -2.41   1.86    2.59    2.75    0.77    2.37    2.08    3.3 -0.21
A9  LC  -0.47   -1.21   0.03    0.1 -0.02   -0.16   0.86    1.09    0.56    0   0.12    4.25    0.36
A10 LC  -1.18   0.92    -1.45   -0.83   -1.87   0.94    1.95    2.62    0.87    4.42    2.05    2.14    1.94
A11 LC  -0.6    -0.55   -0.15   0.08    -1.47   -0.42   0.16    -0.17   0.33    0.3 -0.07   0.24    -0.41
A12 LC  0.04    4.27    -0.9    -0.72   -0.23   0.58    -0.53   0.52    0.37    0.76    0   1.41    1.69
A13 LC  -0.13   1.34    0.35    -1.28   -0.23   -0.03   0.06    2.25    0.99    1.72    0.17    0.96    0.33
A14 LC  -1.2    -5.23   -0.29   -0.69   -1.61   1.6 2.74    2.59    1.57    0.19    3.75    4.51    0.63
A15 LC  -0.78   -1.36   -0.72   -2.52   -4.31   -0.25   -0.06   -0.36   1.44    0.27    0   2.31    2.15
A16 NC  -0.45   -1.18   0.24    -0.27   -0.47   0.68    0.86    1.05    0.49    1.55    0.02    -0.16   0.11
A17 NC  -0.07   0.91    0.07    -0.29   -0.08   -0.87   -1.33   0.15    -0.03   0   0.11    0.87    0.04
A18 NC  -0.4    1.16    -0.17   -0.62   -0.22   -0.12   0.62    0.38    0.15    0   -0.07   -0.21   0.66
A19 NC  -1.02   0.14    -0.03   -0.06   -0.86   -0.04   -0.37   0.46    0.09    0.27    0.02    0.5 -0.97
A20 NC  0.24    2.33    -0.19   -0.06   0.44    -0.26   -1.21   0.51    -0.09   -0.08   0   0.04    -0.51
A21 NC  -0.11   2.2 -0.3    0.7 -0.15   0.47    -0.22   1.24    0.53    2.63    0.2 -0.6    -0.18
A22 NC  0.03    -0.55   -0.37   -0.07   -0.04   0.54    -0.8    0.04    -0.19   -0.01   0.1 -0.1    -0.43
A23 NC  -0.25   -0.67   -0.11   0.05    -0.32   -0.3    0.72    0.14    0.49    -0.03   0   -0.11   0.06
A24 NC  -0.67   0.93    -1.6    -1.2    -0.81   -0.03   -1.71   -0.24   -0.12   1.32    -0.01   -0.13   -0.48
A25 NC  0.15    0.07    -0.04   0.04    -0.22   -0.54   -0.05   0.05    -0.52   -0.05   -0.2    -0.46   -0.25
A26 NC  0.69    -0.37   -0.42   -0.35   0.1 -0.03   -0.28   -0.19   0.04    0   -0.27   0.4 0.52
A27 NC  -0.45   1.27    -0.33   -0.04   0.1 1.08    -0.01   0.62    -0.13   0.48    0.39    0.18    0.19
A28 NC  0.07    -0.98   0.07    -0.31   0.04    0.43    -0.14   -0.16   -0.25   -0.01   -0.02   0.18    -0.14

1 个答案:

答案 0 :(得分:4)

根据文档,您应该能够提供zlim=c(-2, 2)参数,该参数将传递给image()(绘制热图)的基础调用。不幸的是,我还没有让它真正发挥作用。

我想出的解决方法是创建以下功能:

zlim = function(x, lim) { 
  x[which(x < min(lim))] = min(lim)
  x[which(x > max(lim))] = max(lim)
  return(x)
}

然后将您传递的矩阵包裹到heatmap.2(),例如

heatmap.2(zlim(X, c(-2,2)), ... )

请注意以下警告:以这种方式设置显示限制将影响heatmap.2()中默认层次聚类的结果。您应事先使用hclust()as.dendrogram()生成聚类树形图,并根据需要使用Rowv=...Colv=...参数传递它们。

更新

经过一番搜索,我发现了这篇文章:

R: heatmap.2 change color key

使用breaks=...参数。要获得所需的范围,请在breaks=seq(-2,2,length.out=101)的通话中添加heatmap.2()。提供给中断的向量需要比颜色向量使用的元素长一个元素。由于您使用的是col=greenred(100),因此breaks=...需要是长度为101的向量。