在 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 的离散热图的主要内容,如果未能解决你的问题,请参考以下文章