我有一张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
答案 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=...
参数传递它们。
经过一番搜索,我发现了这篇文章:
使用breaks=...
参数。要获得所需的范围,请在breaks=seq(-2,2,length.out=101)
的通话中添加heatmap.2()
。提供给中断的向量需要比颜色向量使用的元素长一个元素。由于您使用的是col=greenred(100)
,因此breaks=...
需要是长度为101的向量。