让geom_tile绘制正方形而不是矩形单元格

dan*_*dan 2 r heatmap ggplot2

我正在尝试heatmap使用ggplot's 生成一个情节geom_tile.我的数据行数多于列数.

  set.seed(1)
  df <- data.frame(val=rnorm(100),gene=rep(letters[1:20],5),cell=c(sapply(LETTERS[1:5],function(l) rep(l,20))))
Run Code Online (Sandbox Code Playgroud)

运行:

library(ggplot2)
ggplot(df,aes(y=gene,x=cell,fill=val))+geom_tile(color="white")
Run Code Online (Sandbox Code Playgroud)

生产: 在此输入图像描述

如何使heatmap单元格具有对称尺寸 - 正方形而不是矩形(高度=宽度)?不会扭曲图形的尺寸.

mpa*_*nco 12

一个选项是添加coord_equal.

默认值ratio = 1,确保x轴上的一个单位与y轴上的一个单位的长度相同

ggplot(df, aes(y = gene, x = cell, fill = val)) +
  geom_tile(color = "white") +
  coord_equal()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


nat*_*sau 5

调整比例如下

set.seed(1)
df <- data.frame(val=rnorm(100),gene=rep(letters[1:20],5),
             cell=c(sapply(LETTERS[1:5],function(l) rep(l,20))))

library(ggplot2)
p <- ggplot(df,aes(y=gene,x=cell,fill=val))+geom_tile(color="white")
p <- p + coord_fixed(ratio = 0.7)
p
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 但是……你_想要_正方形。我不确定你打算如何在没有长图的情况下获得正方形。你可以使用“coord_flip()”(不过,在尝试之前我会交换 x 和 y,因为它是同一件事并且更容易记住)。或者您可以将其分为 2、3、4 个图,但保持相同的色标。 (3认同)