R карта расцветки зависит от значений выше или ниже нуля - PullRequest
3 голосов
/ 22 ноября 2011

Я пытаюсь создать тепловую карту в R, где мои данные колеблются от -5 до +50.Мне бы хотелось, чтобы значения 0 были белыми, значения от 0 до -5 окрашивались в градиенте от белого до синего, а значения от 0 до +50 - от белого до красного.В идеале, я бы также хотел, чтобы использовалось такое же масштабирование, то есть темнота синего цвета при -5 будет такой же, как темнота красного при +5.

У меня есть рабочий код для тепловой карты с градиентом для всего набора данных от синего к красному с белыми цветными точками, близкими к среднему значению данных.

hv <- heatmap.2(data_matrix,
    scale="none",
    Rowv=NA, 
    Colv=NA, 
    col = rev(brewer.pal(11,"RdBu")), 
    margins=c(5,5), 
    cexRow=0.5, cexCol=1.0,
    ylab= "Mutations",
    main = "heatmap", 
    key=TRUE,keysize=1.5, trace="none")

Любые предложения будут в значительной степениоценили.

Ура!

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Если ваши данные изменяются от -5 до +50, при одинаковом градиенте для положительных и отрицательных значений отрицательные цвета будут выглядеть почти как все белые,

washedout

Напротив, полная версия оттенка выглядит так:

fullhue

2 голосов
/ 24 ноября 2011

Вам нужно добавить их к вашей функции.

breaks = c (5/6 * -5,5 / 6 * -4,5 / 6 * -3,5 / 6 * -2,5/6 * -1,0,5 / 6 * 1,50 / 6 * 1,50 / 6 * 2,50 / 6 * 3,50 / 6 * 4,50 / 6 * 5)

breaks = breaks

Это определяет разрывы, которые вы используете в тепловой карте.Вы можете попытаться немного выдумать числа, и, возможно, добавьте еще несколько цветов и разрывов, количество разрывов должно быть числом цветов + 1.

Дать это:

library(RColorBrewer) 
library(gplots)
data_matrix <- cbind(c(rnorm(30,-2.5,sd= 0.85),rnorm(30,25,sd= 8),rnorm(30,6,sd= 3)),
            c(rnorm(30,-2.5,sd= 0.85),rnorm(30,25,sd= 8),rnorm(30,6,sd= 3)),
            c(rnorm(30,-2.5,sd= 0.85),rnorm(30,25,sd= 8),rnorm(30,6,sd= 3)),
            c(rnorm(30,-2.5,sd= 0.85),rnorm(30,25,sd= 8),rnorm(30,6,sd= 3)))

breaks = c(5/6* -5, 5/6* -4, 5/6* -3, 5/6* -2, 5/6* -1, 0 ,5/6* 1, 50/6*1, 50/6*2, 50/6*3, 50/6*4, 50/6*5)
hv <- heatmap.2(data_matrix, 
    scale="none",
    Rowv=NA,
    Colv=NA,
    col = rev(brewer.pal(11,"RdBu")),
    margins=c(5,5),
    cexRow=0.5, cexCol=1.0, 
    breaks=breaks,
    ylab= "Mutations",
    main = "heatmap",
    key=TRUE,keysize=1.5, trace="none")
...