如何用ggplot2中的geom_tile控制连续轴和离轴的纵横比?

时间:2014-06-25 13:34:38

标签: r ggplot2 aspect-ratio

我想用ggplot2geom_tile()制作一个情节。我希望瓷砖具有相同的高度和宽度,如果x和y轴都是离散的,这似乎工作正常(如下所述:adjust ggplot2 geom tile height and width)。

如果我在x轴上的值被解释为连续的,那么,当我使用x轴(MWE1)的离散比例时,我在图中获得了大量的灰色空间并且没有宽高比为1,或者我确实得到了一个没有灰色空间且连续刻度但仍然没有纵横比为1(MWE2)的图。 (我会插入图片,但似乎不允许,因为我的声誉不够高。)

MWE1:

my <- data.frame(x=c(rep(c(0.1),3),rep(c(0.3),3),rep(c(0.5),3)),y=rep(c("frac(SP1)=0.5", "frac(SP1)=0.7", "frac(SP2)=0,3"),3),z=sample(seq(1:50),9))

p <- ggplot(my, aes(x, y)) + geom_tile(aes(fill = z)) +
  scale_fill_gradient(low = "white",high = "steelblue") +
  theme_grey() +
  labs(x = "", y= "") +
  scale_x_discrete(expand = c(0,0)) +
  scale_y_discrete(expand = c(0,0)) +
  coord_fixed(ratio=1) +
  theme(axis.ticks = element_blank())

MWE2:

my <- data.frame(x=c(rep(c(0.1),3),rep(c(0.3),3),rep(c(0.5),3)),y=rep(c("frac(SP1)=0.5", "frac(SP1)=0.7", "frac(SP2)=0,3"),3),z=sample(seq(1:50),9))

p <- ggplot(my, aes(x, y)) + geom_tile(aes(fill = z)) +
  scale_fill_gradient(low = "white",high = "steelblue") +
  theme_grey() +
  labs(x = "", y= "") +
  scale_x_continuous(breaks=c(0.1,0.3,0.5),expand = c(0,0)) +
  scale_y_discrete(expand = c(0,0)) +
  coord_fixed(ratio=1) +
  theme(axis.ticks = element_blank())

在处理离散和连续刻度时,有没有办法可以控制纵横比?或者告诉ggplot2将x值解释为离散的方法?

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,但我认为这就是你想要的:

p <- ggplot(my, aes(factor(x), y)) + geom_tile(aes(fill = z)) +
  scale_fill_gradient(low = "white",high = "steelblue") +
  theme_grey() +
  labs(x = "", y= "") +
  coord_fixed() +
  theme(axis.ticks = element_blank())

print(p)

我将您的x变量转换为一个因子,因为它不是真正连续的。现在你得到一个3x3热图:

enter image description here