首页 > 解决方案 > 如何从 R 中的 heatmap.2 放大/提取部分颜色/提取颜色?

问题描述

我正在使用 heatmap.2 在 R 中创建热图(我认为它需要是 heatmap.2,因为我使用 1 个数据集来生成热图的颜色,并使用第二个数据集来覆盖数字数据)。

到目前为止,这是我的代码示例。实际数据集是 30 列和 1000 行。

heatmap_all_data <-
    data.frame(name = c("John", "Mark", "Luke", "Jack", "Will", "Jim", "Clive", "Steve"),
               trait_1 = c(1, 2, 5, 8, 5, 3, 7, 8),
               trait_2 = c(5, 7, 3, 4, 6, 3, 2, 1)) %>%
    column_to_rownames(var="name")

heatmap_colour <- colorRampPalette(brewer.pal(11, "RdYlBu"))(1000)

heatmap.2(as.matrix(heatmap_all_data),
          scale = "column",
          key = FALSE,
          dendrogram = "none",
          Rowv = FALSE,
          Colv = FALSE,
          trace = "none",
          col = rev(heatmap_colour),
          labRow = row.names(heatmap_all_data))

生成以下热图:https ://i.stack.imgur.com/lK8Sc.png

现在,问题是我只想要这个数据的一小部分,例如我想要以下热图:

heatmap_part_data <-
    data.frame(name = c("John", "Mark", "Luke"),
               trait_1 = c(1, 2, 5),
               trait_2 = c(5, 7, 3)) %>%
    column_to_rownames(var="name")

heatmap_colour <- colorRampPalette(brewer.pal(11, "RdYlBu"))(1000)

heatmap.2(as.matrix(heatmap_part_data),
          scale = "column",
          key = FALSE,
          dendrogram = "none",
          Rowv = FALSE,
          Colv = FALSE,
          trace = "none",
          col = rev(heatmap_colour),
          labRow = row.names(heatmap_part_data))

https://i.stack.imgur.com/j33Ic.png

但是,我希望每个单元格都保持与原始单元格相同的颜色。即我希望我的子集热图中的颜色与总数据相关,而不仅仅是子集数据。(在实际示例中,我想显示 1000 个条目中的 10 个)。

因此,我需要“放大”并重新缩放热图的顶部,然后裁剪图像,将热图的顶部提取到新对象中,同时保持相同的颜色,或者提取有关颜色的完整信息热图并覆盖子集热图中的默认颜色。

目标基本上是输出子集数据热图的图像,每个单元格中的每种颜色与 all_data 热图中的颜色相同。

我希望这很清楚 - 如果您需要任何澄清,请告知!

非常感谢您花时间阅读,希望有人能提供帮助。

最好的,瑞恩

标签: rcolorssubsetgplots

解决方案


找到了解决方案!

所以我从 heatmap.2 切换到 heatmaply - 相同的功能但具有交互性。使用 heatmaply,您可以在热图上拖动一个区域并放大到该区域,从而获得所需的结果,但我想始终如一地缩放到特定区域。

从这个网站(https://plotly.com/r/axes/)我发现了更广泛的 plotly 库的 Layout 功能(heatmaply 是其中的一部分)。

因此,您可以在现有代码中添加:

%>% layout(yaxis = list(range = c(10.5, 0.5)))

(需要添加 0.5 以使行正确居中)

瞧!热图颜色是相对于更广泛的数据集生成的,但只显示了一个子集。


推荐阅读