【问题标题】:Creating sgplot-like discrete heatmap in R在 R 中创建类似 sgplot 的离散热图
【发布时间】: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 更简单的方法(可能是一个主题?另一个包?)。

标签: r ggplot2 heatmap


【解决方案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() 看起来也不错。
猜你喜欢
  • 2021-02-06
  • 2017-04-12
  • 2018-12-17
  • 2016-12-14
  • 2012-12-24
  • 1970-01-01
  • 2012-07-16
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多