在 R 中创建类似 sgplot 的离散热图

Posted

技术标签:

【中文标题】在 R 中创建类似 sgplot 的离散热图【英文标题】:Creating sgplot-like discrete heatmap in R 【发布时间】:2021-06-25 16:50:36 【问题描述】:

我想在 R 中创建一个热图,类似于 SAS 的 proc sgplot 的输出,如下所示。

我能做的最好的就是

set.seed(1)
testdat <- data.frame(reader= c(rep(c("reader1","reader2","reader3"),each=6)),
                      case= c(rep(c("Case1","Case1","Case2","Case2","Case3","Case3"),3)),
                      q=c(rep(c("Q3","Q4"),18)),
                      value=ordered(sample(1:5,18,replace=T)))

> head(testdat,7)
   reader  case  q value
1 reader1 Case1 Q3     1
2 reader1 Case1 Q4     4
3 reader1 Case2 Q3     1
4 reader1 Case2 Q4     2
5 reader1 Case3 Q3     5
6 reader1 Case3 Q4     3
7 reader2 Case1 Q3     2

用ggplot

library(ggplot)
testheat <- ggplot(testdat, aes(q,reader,fill=value,label=q)) +
  geom_tile() +
  facet_wrap(~case,scales="fixed") +
  scale_fill_manual(values=c("white","lightgreen","green","indianred1","red")) +
  scale_y_discrete(limits=rev) + 
  scale_x_discrete(position = "top")

创造

这...看起来并不令人印象深刻。如何使热图看起来像 sgplot 输出?

【问题讨论】:

你在问如何让这个情节看起来“令人印象深刻”?这到底是什么意思呢?您具体要更改哪些内容以使其看起来更像sgplot 我应该更具体如你所说。我观察到的最明显的区别是标题和分隔图块的边界。瓷砖尺寸似乎更大,但在 geom_tile() 中改变尺寸似乎并没有“折叠”轴。但大多数情况下,我希望有一种比单独修改 ggplot 更简单的方法(可能是一个主题?另一个包?)。 【参考方案1】:

这是一个稍微清理过的版本。我使用 facet_grid 而不是 facet_wrap 来组合 y 刻度。选择了一个精心策划的色标。删除了不必要的轴标签。将color 添加到geom_tile 以制作线条。使用了更简约的主题。更改了绘图窗口的大小,使其更紧凑(这只是用鼠标调整窗口的大小 - 如果您保存绘图,您可以指定您想要的任何尺寸)。

ggplot(testdat, aes(q,reader,fill=value,label=q)) +
  geom_tile(color = "gray60") +
  facet_grid(~case) +
  scale_fill_brewer(type = "seq", palette = "RdYlGn", direction = -1) +
  scale_y_discrete(limits=rev) + 
  scale_x_discrete(position = "top") + 
  ggthemes::theme_clean() + 
  theme(strip.placement = "outside") +
  labs(x = "", y = "")

【讨论】:

看起来很棒,尤其是您选择的主题使其看起来更接近 sgplot 输出。在你的上面添加 + theme(strip.placement = "outside") 让它看起来非常可取。 theme_minimal() 看起来也不错。

以上是关于在 R 中创建类似 sgplot 的离散热图的主要内容,如果未能解决你的问题,请参考以下文章

R:使用 ggplot2 的离散热图

如何在 python 中创建从绿色到红色的热图?

如何创建带有热图的世界地图

热图中 x 轴上的对角线标签方向

matplotlib 中的 3D 离散热图

seaborn 热图图中的离散图例