【问题标题】:How to anchor color scale to the min / max for each row using pheatmap in R如何使用 R 中的 pheatmap 将色阶锚定到每行的最小值/最大值
【发布时间】:2019-06-19 15:44:48
【问题描述】:

我目前在 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)染成深红色,因为色标固定在最小值(缩放后约 -0.41)和整个热图的最大值(缩放后~2.04)。

我不怀疑有一种简单的方法可以实现这一点,但我无法通过查看基本文档来弄清楚。我也明白以这种方式显示热图不会允许基因之间进行任何比较,但这对我的使用而言并不是特别重要。

【问题讨论】:

    标签: r heatmap pheatmap


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 我应该再澄清一点。在使用 pheatmap 创建热图时,我已经在缩放数据。对于我给出的第一个示例集,尽管方法不同,但 Morpheus 和 pheatmap 之间的结果将是相同的。对于第二个示例,pheatmap 将生成一个热图,其中 10(缩放后约 2.04)将是深红色,而 6(缩放后约 1.34)将不是,尽管它是该行中的最高值。 Morpheus 会生成一个热图,其中 1 和 0 都是深蓝色,而 6 和 10 是深红色,因为它们是各自行的最小值和最大值。
    • 使用此数据 mat &lt;- t(data.frame(row1=c(1, 2, 3, 4, 5, 6), row2=c(10, 0, 0, 0, 0, 0))) 运行相同的代码。 6 和 10 是红色的,10 是暗的,因为它更像是一个异常值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2018-10-02
    • 1970-01-01
    • 2021-09-27
    • 2023-03-08
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多