【问题标题】:How to change heatmap.2 color range in R?如何更改 R 中的 heatmap.2 颜色范围?
【发布时间】:2013-07-23 02:38:57
【问题描述】:

我正在使用 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 分数)的热图,这是我所追求的,采用每个生物学家最喜欢的红-黑-绿配色方案!

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

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

【问题讨论】:

标签: r colors heatmap


【解决方案1】:

我只是通过将 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")

【讨论】:

  • 令我困惑的是,在您更改不同颜色的不等分之后,很难解释热图结果,对吧?因为,它们不是同样连续的?
  • 另外一个问题是,如果你这样设置颜色,key好像总是不正常(热图图右上角没有显示)。你以前发现过这样的问题吗?
【解决方案2】:

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

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

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

我建议您查看RColorBrewer package,他们有相当不错的内置调色板,并查看交互式website for colorbrewer

【讨论】:

  • 当时它对我有用,你当然必须使用这个调色板作为函数参数 (col=my_palette)
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      相关资源
      最近更新 更多