如何在R中使用Pheatmap将颜色比例固定到每一行的最小值/最大值

时间:2019-01-25 19:13:03

标签: r heatmap pheatmap

我目前正在R中使用pheatmap从单个单元格数据创建基因表达的热图。

我目前遇到的问题是,我似乎无法复制其他热图生成器(例如Morpheus:https://software.broadinstitute.org/morpheus/

)中使用的相对色阶。

要详细说明,在Morpheus中,色标可以固定到每一行的最小和最大表达值。例如,假设色阶很简单,例如c('dark_blue', 'blue', 'bright_blue', 'white', 'bright_red', 'red', 'dark_red'),而我提供的矩阵看起来像t(data.frame(row1=c(0, 1, 2, 3, 4, 5, 6), row2=c(10, 11, 12, 13, 14, 15, 16))),,Morpheus将在第一行中将0深蓝色和6深红色着色,而将10变为深蓝色。第二行中的16将为深红色。颜色条然后代表每行的相对最小值和最大值。

请注意,这与简单缩放数据不同,这是我在pheatmap中所做的事情。问题是,如果我有t(data.frame(row1=c(1, 2, 3, 4, 5, 6), row2=c(10, 0, 0, 0, 0, 0)))之类的东西,那么即使缩放数据也不会允许6(缩放后为〜1.34)被涂成深红色,因为色标被固定为最小值(〜整个热图的最大缩放比例)和最大值(缩放后约为2.04)。

我毫不怀疑有一个简单的方法可以实现这一目标,但是我无法通过浏览基本文档来弄清楚。我还了解到,以这种方式显示热图不允许对基因进行任何比较,但这对我的用途并不是特别重要。

1 个答案:

答案 0 :(得分:0)

您可以像这样按行缩放数据:

mat <- t(data.frame(row1=c(0, 1, 2, 3, 4, 5, 6), row2=c(10, 11, 12, 13, 14, 15, 16)))
mat2 <- t(apply(mat, 1, scale))

然后pheatmap带有参数cluster_cols,您可以将其设置为FALSE。将所有这些放在一起,将在最终的热图中使深蓝色变为0和10

pheatmap(mat2, cluster_cols = F)

enter image description here