【问题标题】:pheatmap: color each row of a matrix independently using a gradient from max to minpheatmap:使用从最大到最小的梯度独立地为矩阵的每一行着色
【发布时间】:2021-09-27 13:18:38
【问题描述】:

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

 [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: Row scaling not working correctly for heatmap 的其他解决方案,但这对我不起作用。请帮忙。

【问题讨论】:

    标签: r pheatmap


    【解决方案1】:

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

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

    这似乎可行,但还可以做得更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-11
      • 2019-06-19
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      相关资源
      最近更新 更多