对热图使用绝对颜色映射

Use absolute color mapping for heat maps

我正在尝试创建一个热图,其中单元格的颜色与网格中的其他值无关,而是与绝对值相关联(有点像 excel 中的单元格格式,例如,绿色表示 0.20 到 0.25 之间的值)。我一直在玩 R 包 superheat 但我仍然不清楚如何提供这样的映射。关于如何做到这一点的任何建议?最好使用 superheat,但也可以通过其他包提示如何使用。

更新: 例如,使用 mtcars 数据集,我们得到

superheat(mtcars,
          X.text = as.matrix(mtcars),
          legend.breaks = c(min(mtcars), 0, max(mtcars)))

向数据框添加新行,原始行中完全相同的值会得到不同的颜色:

mtcars.new <- rbind(mtcars, 
                    extrarow = c(-100, 6, 20, 10, 6, 2, 10, 1, 1, 6, 6))

superheat(mtcars.new,
          X.text = as.matrix(mtcars.new),
          legend.breaks = c(min(mtcars.new), 0, max(mtcars.new)))

我想要的是,颜色不依赖于数据框中存在的值,这样当为不同的数据集创建地图时,它们可以直接相互比较。

这是一个示例,说明如果根据变量值创建“grpColor”变量,您可以如何操作。然后,您可以将 ggplot 中的颜色与该变量值进行匹配。 (如果需要,请不要犹豫更改因子水平)

### 1- Initiating data-frame
set.seed(1)
dfHeatmap <- data.frame(group1=rep(1:4, times=4), group2=rep(1:4, each=4), value=sample(1:100, 16))

### 2- Selecting colors depending on variable values
dfHeatmap$grpColor <- ifelse(dfHeatmap$value<30, "low", 
                 ifelse(dfHeatmap$value<60, "medium", "high"))

### 3- Heatmap with fill=grpColor option in geom_tile
ggplot(data=dfHeatmap, aes(x=as.factor(group1), y=group2)) + 
  geom_tile(aes(fill=grpColor)) + 
  scale_fill_manual("legend", values = c("#25714f", "#1ea467", "#00e57d")) + 
  xlab("group1") + 
  ylab("group2") + 
  geom_text(aes(label=value)) + 
  theme(legend.position="none", 
        line = element_blank())