r - 特定值的 Pheatmap 颜色

标签 r plot heatmap color-palette pheatmap

我对 R 非常陌生,最近我一直在使用 pheatmap 库来生成热图。我的问题是我想以特定的方式为我的热图着色。我将在下面描述:

  1. 值<1应该是色带(例如深蓝色到浅蓝色)
  2. 精确等于 1 的值应为深灰色
  3. 值 > 1 应该是色带(例如,深红色到浅红色)

我已经尝试过使用各种调色板的 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 的聚类,这不是我想要做的事情。谢谢!

最佳答案

您无法设置特定值的颜色,但可以选择非常小的范围,例如[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))

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

关于r - 特定值的 Pheatmap 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41783245/

相关文章:

Matlab:当其中一个包含颜色条时如何对齐子图的轴?

python - MatLab 到 Python 欧拉方程

Matlab - 创建热图以可视化二维点数据的密度

r - 进入一个环境

r - r 中带循环的函数

r - geom_point 并不总是显示在 map 上

matlab - 在 MATLAB 中如何将多个现有绘图移动到一个子图中?

python - 如何在python中为热图的特定元素添加颜色边框或类似的突出显示?

python - 如何在 Plotly 中制作热图动画

r - 创建以按组的变量总和为条件的变量