R: Масштабирование строк не работает правильно для тепловой карты.

В настоящее время я создаю тепловую карту для некоторых данных, где значения для каждого элемента (OTU) сильно различаются, поэтому я использую параметр scale="row".

Я предположил, что это будет использовать один и тот же цветовой градиент для каждой строки, поэтому всегда будет присутствовать максимальный цвет (темно-зеленый) и минимальный (белый). Однако, как вы можете видеть ниже, некоторые цвета меняются от белого, другие от светло-зеленого до темно- или темно-зеленого.

Таблица OTU

Вот код, который я использовал:

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

Любая помощь будет принята с благодарностью!


person thh32    schedule 11.04.2018    source источник
comment
Все значения в масштабированной матрице отображаются в цветовой схеме, которую вы определили, а не построчно. Также я рекомендую использовать расходящуюся цветовую схему для масштабированных данных.   -  person Lerong    schedule 11.04.2018
comment
@Lerong Матрица масштабирования, отображаемая на цветовую схему, - это то, что я хочу, однако во время масштабирования образцы со значением 0 по какой-то причине отображаются как не совсем белые. Примером этого является то, что в верхней строке с 7-го по последний столбец все имеют значения 0 (эта строка - OTU_176 в таблице данных), и все же все они отображаются как не совсем белые, а не как белые.   -  person thh32    schedule 12.04.2018


Ответы (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) сужает диапазон до более подходящих значений.

person Jakub Buček    schedule 11.04.2018
comment
Это масштабирует всю тепловую карту, и, как я уже сказал, отдельные строки имеют очень разные числа. Некоторые идут от 0 до 100, другие от 0 до 1000, поэтому мне нужно, чтобы каждая строка отображалась отдельно с одной и той же цветовой схемой. - person thh32; 12.04.2018
comment
Вы можете перемасштабировать исходные данные с помощью логарифма, т.е. вместо mat_data использовать log(mat_data+1). Он меняет диапазон от 0 - 356 (range(mat_data)) до 0 - 6 (range(log(mat_data+1))). - person Jakub Buček; 12.04.2018
comment
Большое спасибо! Использование строки heatmap(log(mat_data+1), Rowv=NA, Colv=NA, col = my_palette, scale="none", margins=c(23,15)) решило проблему и правильно показывает точки без подсчета, если вы отредактируете свой пост, чтобы указать это, я могу выбрать его как ответ - person thh32; 12.04.2018