特定值的Pheatmap颜色

时间:2017-01-21 18:58:28

标签: r plot heatmap color-palette pheatmap

我是R的新手,最近我一直在玩pheatmap库来生成热图。我的问题是我想以特定的方式为我的热图着色。我将在下面描述:

  1. 值< 1应该是颜色渐变(例如深蓝色到浅蓝色)
  2. 完全等于1的值应为深灰色
  3. 值> 1应该是颜色渐变(例如暗红色到浅红色)
  4. 我使用breaks参数和color参数使用各种调色板,但我似乎无法找到一个好的解决方案。我最接近的是这样的:

    pheatmap(mtx, 
         color =  c('#4444FF','#F4FF4F','#FF4444'), 
         breaks = c(0,1,2,3), 
         legend_breaks = c(0,1,2) )
    

    但是这不允许可视化范围,即0.1应该看起来与0.9不同,即使它们都应该是蓝色。有人可以提供建议或建议吗?我确实看过This ticket并考虑将1改为NA,但对我来说这有点太复杂了。更不用说我必须关闭pheatmap的聚类,这不是我想做的事情。谢谢!

1 个答案:

答案 0 :(得分:1)

您无法为特定颜色设置颜色,但可以使用非常小的范围,例如[0.999,1.001]

应该为问题中提到的指定范围设置中断并相应地指定颜色;

library(pheatmap)
bk1 <- c(seq(-2,0.9,by=0.1),0.999)
bk1 <- c(1.001,seq(1.1,3,by=0.1))
bk <- c(bk1,bk2)  #combine the break limits for purpose of graphing

my_palette <- c(colorRampPalette(colors = c("darkblue", "lightblue"))(n = length(bk1)-1),
              "gray38", "gray38",
              c(colorRampPalette(colors = c("darkred", "tomato1"))(n = length(bk2)-1)))

pheatmap(df, color = my_palette, breaks = bk, scale = "none", 
             cluster_rows = F, cluster_cols = F, margin = c(5,5))

为了使用 rnorm.within 功能显示示例,我制作了以下数据集:

   #V1 is random between -2 and 3 
   #V2 is equal to 1
   #V3 is random between 0 and 3

   df <- cbind(rnorm.within(1000, -2, 3),rep(1,1000), rnorm.within(1000,0,3))

这将是上面创建的数据的热图;