R:对于热图,行缩放无法正常工作

时间:2018-04-11 14:37:31

标签: r heatmap gplots

我目前正在为某些数据创建热图,其中每个项目(OTU)的值差别很大,因此我使用的是scale="row"选项。

我认为这会对每一行使用相同的颜色渐变,因此最大颜色将始终存在(深绿色),最小颜色(白色)也是如此。然而,正如你在下面看到的,有些是白色的,有些来自浅绿色,还有黑色或深绿色。

OTU table

以下是我一直在使用的代码:

library(gplots)
library(RColorBrewer)
data <-read.csv("Heatmap_data.csv", comment.char="#")
rnames <- data[,1]                            # assign labels in column 1 to "rnames"
mat_data <- data.matrix(data[,2:ncol(data)])  # transform column 2-5 into a matrix
rownames(mat_data) <- rnames                  # assign row names


my_palette <- colorRampPalette(c("white", "dark green"))(n = 1090)


heatmap(mat_data, Rowv=NA, Colv=NA, col = my_palette, scale="row", margins=c(23,15))

许多灰白色的值实际上都是0,正如您在此处的数据中所看到的那样:

MB.11   MB.8    MB.7    MB.12   MB.9    MB.10   MB.4    MB.6    MB.5    MB.3    MB.2    MB.1    K2295   K229456 K2299   K2297   K2298   K2293   K2294   K2292   K2290   K2291
OTU_43  23.5019505852   4.3947267864    6   18.3651985319   3.0748596382    5.5431848853    71.853471596    24.1857966978   12.6422018349   13.2893694289   46.5896990741   21.0355475222   38.5817456801   7.723156853 55.9703296703   6.1243646222    72.4165876777   74.0147572816   46.6683375104   87.3876576884   23.2358576642   33.7528164347
OTU_48  27.7750325098   36.4134505159   9   55.0955955956   9.7370555209    8.8690958165    108.8913435528  25.8199721504   23.8256880734   10.3060415979   42.7864583333   4.7020635638    3.6397873283    3.2518555171    69.8124542125   0   3.1146919431    26.7984466019   124.2201336675  355.7125809751  38.2267335766   63.8762977689
OTU_162 8.0120286086    11.3007260222   2   8.7714381048    2.5623830318    3.3259109312    35.5563570784   19.6101054307   12.6422018349   16.0014856388   57.0486111111   31.9245368278   4.367744794 3.2518555171    6.3192307692    3.8973229414    12.4587677725   29.3506796117   11.6670843776   35.8513467439   47.2212591241   45.3666887564
OTU_64  16.0240572172   0   36  35.6339673006   0.5124766064    5.5431848853    3.7037871957    0   1.4587155963    0   24.7210648148   0   1.4559149313    0   0   0   0   0   0   3.3610637572    0   2.1776010603
OTU_60  0   61.5261750096   23  0   42.0230817218   0   0   0   8.752293578 7.5939253879    3.8032407407    11.6314203946   21.8387239699   13.8203859476   8.1247252747    0   22.5815165877   0   3.4314954052    14.0044323219   8.2449817518    3.6293351005
OTU_116 136.7386215865  8.7894535728    15  30.9741408075   23.0614472863   103.6575573549  0   0   0   0   0   0   31.3021710235   8.1296387927    28.586996337    28.9515418502   49.83507109 0   0   0   0   0
OTU_86  7.477893368 26.3683607184   1   2.1928595262    21.5240174672   16.6295546559   2.9630297565    0.653670181 0   0   13.3113425926   0   0   0   0.3009157509    0   0   0   0   2.8008864644    0.7495437956    1.0888005302
OTU_534 134.0679453836  0   15  0   26.6487835309   180.1535087719  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
OTU_75  81.7226918075   0   6   0   12.2994385527   121.3957489879  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
OTU_176 26.7067620286   0   0   19.461628295    26.6487835309   9.423414305 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   7.9845372211

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以分别缩放每行的颜色。在

heatmap(log(mat_data+1), Rowv=NA, Colv=NA, col = my_palette, scale="none", margins=c(23,15))

应该做的。

scale="none"会抑制任何缩放,log(mat_data+1)会将范围缩小为更合适的值。