首页 > 解决方案 > pheatmap:使用从最大到最小的梯度独立地为矩阵的每一行着色

问题描述

我正在尝试显示矩阵中每一行的颜色(最小到最大渐变):

 [1,]  8 12   11  5   24
 [2,]  1  2    7  0    8
 [3,] 53 99 1501 15 9859
 [4,] 59 24   19 19   32
 [5,]  4  2   11  0   68
 [6,]  4  9  177  2  710
 [7,]  2  1    2  2    3
 [8,]  0  5  133  0 2195
 [9,]  3  3    2  1   15
[10,]  0  1    0  0   14
[11,]  0  3   21  0   17
[12,]  2  1    2  0    6
[13,] 11 26   22  3   16
[14,]  6 38  217  1  354
[15,]  3 10   17  0   68
[16,]  3  3   12  2   19
[17,]  7  5   26  1   40
[18,]  1  0    6  0   27
[19,]  1  0   37  0  434
[20,] 30 15   20  9   27

我的代码如下:

RT<-read.table("tmp",header=FALSE,sep="\t");
mat <-data.frame(RT)
pheatmap(mat, scale = "row",cluster_cols=FALSE,cluster_rows = FALSE, row.names =FALSE);
dev.off()

我收到了以下图片: 在此处输入图像描述

正如您在第二行中看到的,最大值需要为红色,但它是橙色的,因为第二行的第 3 列和第 5 列具有相似的值。我想做最大是红色,最小是蓝色,红色,黄色和蓝色之间的渐变,对于每行独立的最大值和最小值之间的值。0 总是蓝色的。只有相同的值才能获得相同的颜色。我尝试了R 的其他解决方案:行缩放不适用于热图,但这对我不起作用。请帮忙。

标签: rpheatmap

解决方案


我尝试了一些事情,我想我可能有一个接近的答案:

A)将每一行与其最大值分开。

 xx <- apply(mat,1, function(i) i/max(i));

B)最小值始终为0。因此,我将每行的最小值转换为0。

xx1<-t(apply(xx, 1, function(x) replace(x, x== min(x), 0.0)))
pheatmap(xx1, scale = "none",cluster_cols=FALSE,cluster_rows = FALSE, row.names =FALSE);
dev.off()

这似乎有效,但可以做得更好。在此处输入图像描述


推荐阅读