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

22

我正在尝试使用ggplotgeom_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))))

运行中:

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

产生的结果: 在此输入图像描述

如何使热力图单元格具有对称的尺寸 - 正方形而不是长方形(高度=宽度)?而不扭曲图形的尺寸。

2个回答

43

一种选项是添加coord_equal

默认情况下,比率为1,确保x轴上的一个单位与y轴上的一个单位具有相同的长度。

ggplot(df, aes(y = gene, x = cell, fill = val)) +
  geom_tile(color = "white") +
  coord_equal()

输入图像描述


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

enter image description here


1
但是如果我的实际数据有更多的行:df <- data.frame(val=rnorm(500),gene=rep(1:100,5),cell=c(sapply(LETTERS[1:5],function(l) rep(l,100)))), 这会大大缩小图形。 - dan
3
但是...你想要正方形。我不确定你打算如何在没有长的图表的情况下得到正方形。你可以使用 coord_flip()(但在尝试之前,我会交换 x 和 y,因为这是相同的操作并且更容易记住)。或者,您可以将其分成2、3或4个图表,但保持相同的颜色比例尺。 - hrbrmstr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接