17

我正在使用 gplot 生成一个热图,显示治疗组与配对对照的 log2 倍变化。使用以下代码:

 heatmap.2(as.matrix(SeqCountTable), col=redgreen(75), 
           density.info="none", trace="none", dendrogram=c("row"), 
            symm=F,symkey=T,symbreaks=T, scale="none") 

我输出了一个带有真实倍数变化值(即非 Row-Z 分数)的热图,这是我所追求的,采用每个生物学家最喜欢的红-黑-绿配色方案!

http://i.stack.imgur.com/uhFbP.jpg

log2 倍变化的实际范围是 -3/+7,在 -2/-1 和 +1/+2 范围内有许多值,它们分别显示为深红色/绿色。这使得整个热图非常暗,难以解释。

  • 有没有办法倾斜颜色渐变以使其不那么线性?也就是说,从黑色到非常亮的渐变出现在更小的范围内?
  • 和/或将颜色范围更改为不对称,即从-3/+7 开始运行,就像数据一样,而不是像目前的比例那样-7/+7,黑色仍然以零为中心?
4

4 回答 4

17

只需将 symkey 参数更改为 FALSE,我就可以使颜色范围不对称

symm=F,symkey=F,symbreaks=T, scale="none"

解决了 colorRampPalette 的颜色问题,使用中断参数指定每种颜色的范围,例如

colors = c(seq(-3,-2,length=100),seq(-2,0.5,length=100),seq(0.5,6,length=100))

my_palette <- colorRampPalette(c("red", "black", "green"))(n = 299)

heatmap.2(as.matrix(SeqCountTable), col=my_palette, 
    breaks=colors, density.info="none", trace="none", 
        dendrogram=c("row"), symm=F,symkey=F,symbreaks=T, scale="none")
于 2013-07-24T15:58:55.400 回答
15

RColorBrewer您可以尝试使用包创建自己的调色板

my_palette <- colorRampPalette(c("green", "black", "red"))(n = 1000)

看看这是什么样子。但我认为在你的情况下,如果你真的想把黑色保持在“中间”,只有缩放会有帮助。您可以简单地使用my_palette而不是redgreen()

我建议您查看RColorBrewer 包,它们有非常好的内置调色板,并查看colorbrewer 的交互式网站

于 2013-07-23T21:30:07.983 回答
2

我认为你需要设置symbreaks = FALSE 这应该允许不对称的色阶。

于 2016-10-14T17:42:36.157 回答
2

heatmap.2对于那些不使用(aheatmap很好!)的人来说,这是另一种选择

从输入矩阵的最小值到最大值制作一个包含 100 个值的序列向量,在其中找到最接近 0 的值,在所需中点之间创建两个颜色向量,组合并使用它们:

breaks <- seq(from=min(range(inputMatrix)), to=max(range(inputMatrix)), length.out=100)
midpoint <- which.min(abs(breaks - 0))
rampCol1 <- colorRampPalette(c("forestgreen", "darkgreen", "black"))(midpoint)
rampCol2 <- colorRampPalette(c("black", "darkred", "red"))(100-(midpoint+1))
rampCols <- c(rampCol1,rampCol2)
于 2017-07-07T07:41:14.897 回答