需要 64 种颜色的调色板:简单的热图问题
Need a palette with 64 colours: simple heatmap question
我有几千个矩阵,如下所示:
[,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))
...但是 error/warning 消息是:
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(等等)”,但这对我不起作用。请参阅下面的热图:前四行未加阴影,而它们应该是。
您可以使用基础 colorRampPalette
函数扩展 RColorBrewer
调色板:
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))
默认情况下 heatmap
使用 scale="row"
,也可用 "column"
和 "none"
。我认为后者是您所需要的,因为没有变化的行被缩放为零,因此看起来没有阴影。当您执行 col=heat.colors(64)
时,“有问题的”行的颜色非常浅。诀窍是将一些多余的颜色和子集添加到 64 种颜色中。
heatmap(m, Colv=NA, Rowv=NA,
xlab="", ylab="Irradiance",
main="Snapshot 1200 day 160",
col=heat.colors(64+6)[1:64], scale="none")
m <- structure(c(560.5681, 556.7537, 570.1362, 564.1036, 606.317,
555.8331, 790.483, 790.483, 790.483, 790.483, 526.3265, 525.3711,
534.5701, 538.4911, 583.7723, 576.4716, 790.483, 790.483, 790.483,
790.483, 501.4808, 460.2989, 461.2309, 593.1357, 536.8325, 642.0229,
790.483, 790.483, 790.483, 790.483, 447.4124, 412.7424, 476.0936,
573.0606, 614.4326, 617.1337, 790.483, 790.483, 790.483, 790.483,
475.3496, 478.107, 509.148, 532.7869, 514.1198, 620.3885, 790.483,
790.483, 790.483, 790.483, 487.1298, 506.8339, 491.3332, 496.5737,
427.6375, 483.4476, 790.483, 790.483, 790.483, 790.483), .Dim = c(10L,
6L))
我有几千个矩阵,如下所示:
[,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))
...但是 error/warning 消息是:
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(等等)”,但这对我不起作用。请参阅下面的热图:前四行未加阴影,而它们应该是。
您可以使用基础 colorRampPalette
函数扩展 RColorBrewer
调色板:
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))
默认情况下 heatmap
使用 scale="row"
,也可用 "column"
和 "none"
。我认为后者是您所需要的,因为没有变化的行被缩放为零,因此看起来没有阴影。当您执行 col=heat.colors(64)
时,“有问题的”行的颜色非常浅。诀窍是将一些多余的颜色和子集添加到 64 种颜色中。
heatmap(m, Colv=NA, Rowv=NA,
xlab="", ylab="Irradiance",
main="Snapshot 1200 day 160",
col=heat.colors(64+6)[1:64], scale="none")
m <- structure(c(560.5681, 556.7537, 570.1362, 564.1036, 606.317,
555.8331, 790.483, 790.483, 790.483, 790.483, 526.3265, 525.3711,
534.5701, 538.4911, 583.7723, 576.4716, 790.483, 790.483, 790.483,
790.483, 501.4808, 460.2989, 461.2309, 593.1357, 536.8325, 642.0229,
790.483, 790.483, 790.483, 790.483, 447.4124, 412.7424, 476.0936,
573.0606, 614.4326, 617.1337, 790.483, 790.483, 790.483, 790.483,
475.3496, 478.107, 509.148, 532.7869, 514.1198, 620.3885, 790.483,
790.483, 790.483, 790.483, 487.1298, 506.8339, 491.3332, 496.5737,
427.6375, 483.4476, 790.483, 790.483, 790.483, 790.483), .Dim = c(10L,
6L))