首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >特定值的Pheatmap颜色

特定值的Pheatmap颜色
EN

Stack Overflow用户
提问于 2017-01-21 18:58:27
回答 1查看 6.5K关注 0票数 2

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

  1. 值<1应该是颜色坡道(例如,深蓝色到浅蓝色)。
  2. 一个完全等于1的值应该是深灰色的。
  3. 值>1应该是彩色坡道(例如,暗红色到浅红色)。

我使用过各种调色板的breaks参数和color参数,但我似乎无法找到一个好的解决方案。我来得最近的地方是这样的:

代码语言:javascript
运行
复制
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的集群,这不是我想要做的事情。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-06-06 21:18:46

不能为特定值设置颜色,但可以选择非常小的范围(如[0.999,1.001] )。

您应该设置您在问题中提到的范围的中断,然后相应地分配颜色;

代码语言:javascript
运行
复制
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))

我使用https://gist.github.com/tomhopper/19f07fc96db8d149b24f制作了一个示例数据集

代码语言:javascript
运行
复制
   #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))

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41783245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档