使用 R 创建热图

Posted

技术标签:

【中文标题】使用 R 创建热图【英文标题】:Creating a heatmap using R 【发布时间】:2021-09-26 00:58:59 【问题描述】:

我想创建一个热图来显示我拥有的数据。数据由 3 列和 100 行组成。我使用以下代码使用 R 中的 ggplot 包创建热图。

x=c("x1","x2","x3")
y=paste0("var",seq(1,100))
datax=expand.grid(x,y)
datax$z=runif(300,0,5)
require(ggplot2)
ggplot(datax, aes(Var1, Var2, fill= z)) + 
  geom_tile()

我得到如下输出:

我想让这个图表更漂亮。即,这里每个单元格都有一个矩形形状。如何使它显示为正方形?还有没有办法删除行名并将列标题放在图的顶部?

谢谢

【问题讨论】:

这能回答你的问题吗? correlation heatmap using heatmaply R @Galen 恐怕不是。我只想为原始数据创建一个热图。不适用于相关性 【参考方案1】:

它们之所以是矩形的,是因为y轴上有很多值,而x轴上只有几个值。如果您希望它们是方形的,则需要明确保存具有特定大小的绘图。

ggplot 命令(没有+)之后立即运行此命令,然后使用widthheight。默认情况下,它将保存最后显示的图。

ggsave("filename.pdf", device = "pdf", width = <w>, height = <h>)

要获得顶部的 x 标签,请使用 + scale_x_discrete(position="top")。要完全删除 y 轴变量,请使用 + theme(axis.text.x=element_blank())(均在 ggplot 调用之后)

其他想法:

如果您需要更多空间,请在geom_tile() 之后删除带有+ xlab(NULL) + ylab(NULL) 的x 和y 标签 因为这可能是一个又高又瘦的图,这取决于您是否有另一个变量 var3 可用于对 y 轴进行子集化,您可以使用 facet_wrap(~var3) 将巨大的热图分解为更小、更方形的热图

【讨论】:

以上是关于使用 R 创建热图的主要内容,如果未能解决你的问题,请参考以下文章

使用传单函数 add_heatmap() 或 addHeatmap() 在 R 上创建热图

R 中热图/聚类默认值的差异(热图与热图.2)?

使用 R 将四次核热图转换为大多边形

使用 ggplot2 在 r 中为热图准备数据框

Plotly 中的相关热图

如何在 R 中为多个热图设置动画