首页 > 解决方案 > 需要 64 种颜色的调色板:简单的热图问题

问题描述

我有几千个矩阵,如下所示:

         [,1]     [,2]     [,3]     [,4]     [,5]     [,6]
 [1,] 560.5681 526.3265 501.4808 447.4124 475.3496 487.1298
 [2,] 556.7537 525.3711 460.2989 412.7424 478.1070 506.8339
 [3,] 570.1362 534.5701 461.2309 476.0936 509.1480 491.3332
 [4,] 564.1036 538.4911 593.1357 573.0606 532.7869 496.5737
 [5,] 606.3170 583.7723 536.8325 614.4326 514.1198 427.6375
 [6,] 555.8331 576.4716 642.0229 617.1337 620.3885 483.4476
 [7,] 790.4830 790.4830 790.4830 790.4830 790.4830 790.4830
 [8,] 790.4830 790.4830 790.4830 790.4830 790.4830 790.4830
 [9,] 790.4830 790.4830 790.4830 790.4830 790.4830 790.4830
[10,] 790.4830 790.4830 790.4830 790.4830 790.4830 790.4830

我想建立一个足够敏感的热图,让每个细胞都有自己的阴影。我尝试了以下方法:

heatmap(irradiances_shaded_ready_to_use_FINAL[[160]][[1200]], Colv=NA, 
        Rowv=NA, xlab="", ylab="Irradiance", 
        main="Snapshot 1200 day 160", 
        col=colorRampPalette(brewer.pal(64, "Oranges"))(3))

...但是错误/警告消息是:

Warning message:
In brewer.pal(64, "Oranges") :
  n too large, allowed maximum for palette Oranges is 9
Returning the palette you asked for with that many colors

请注意:在我上面粘贴的上述矩阵中,有几个重复的值,但通常情况并非如此。我有 500,000 个这样的矩阵,我想对它们的一小部分进行热图,但总的来说,我希望在大多数情况下会有 64 个唯一值。

所以基本上:我需要一个可以说明 64 个唯一值矩阵的调色板。如果这是一个如此简单的问题,我很抱歉。

@jay.sf 建议我使用“heat.colors(等)”,但这对我不起作用。请参阅下面的热图:前四行没有阴影,而它们应该是。

在此处输入图像描述

标签: rcolorsheatmap

解决方案


您可以使用基本功能扩展RColorBrewer调色板colorRampPalette

library(RColorBrewer)
colorRampPalette(brewer.pal(8, "Oranges"))(64)

我还建议使用pheatmap::pheatmap. 您提供一个数字矩阵 + 一个 100 种颜色的向量,剩下的就交给它了。

library(pheatmap)
data <- matrix(rnorm(100), ncol = 10)
pheatmap(mat = data, color = colorRampPalette(brewer.pal(8, "Oranges"))(100))

推荐阅读