2013-07-23 184 views
13

我正在使用gplot生成热图,显示治疗组与对照组的log2倍变化。用下面的代码:如何更改R中的heatmap.2颜色范围?

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

我输出的热图与真正的倍数变化值(即,非行-Z得分),这是我后,因为是红 - 黑 - 绿配色方案每个生物学家的最爱!

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

的log 2倍的变化的实际范围为-3/+ 7,具有在-2/-1和+ 1/+ 2范围的许多值,其显示为暗红色/绿色(分别)。这使整个热图非常黑暗,难以解释。

  • 是否有偏斜颜色渐变的方法,使其更不线性?也就是说,从黑色到非常明亮的梯度会在更小的范围内出现?
  • 并且/或者将颜色范围改变为不对称,即,如数据那样从-3/+ 7运行,而不是像当前尺度那样-7/+ 7,而黑色仍然以零为中心?
+6

请不要在任何应该显示给别人的东西中使用红绿方案。 8%的男性和0.5%的女性患有色彩障碍,并且无法阅读您的热图。 HTTP:// designshack。net/articles/accessibility/tips-for-designing-for-colorblind-users/ – January

回答

11

你可以尝试使用RColorBrewer

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

创建自己的调色板,看看这个样子。但我认为在你的情况下,如果你真的想把黑色保持在“中间”,只有缩放才会有帮助。你可以简单地使用my_palette代替redgreen()

我建议你检查出RColorBrewer package,他们有相当不错的内置调色板,看看互动website for colorbrewer

+0

只有你的代码,颜色键保持为空 – Woeitg

+0

当时它对我有用,你必须使用这个调色板作为函数参数课程('col = my_palette') – Sebastian

11

我得到的颜色范围是不对称只需改变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") 
+0

我对此感到困惑的是,在改变不同颜色的不等间隔之后,很难解释热图结果,对吗?因为他们不是一样的连续? –

+0

另一个问题是,如果你像这样设置颜色,那么关键看起来总是不正常的(在热图图的右上角没有显示)。你之前有没有发现这样的问题? –

0

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

0

下面是对于那些不使用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)