如何在geom_raster中设置常量“ ylim”?

时间:2019-08-08 22:28:11

标签: r ggplot2 geom-raster

我有一个“时间序列”,对同一个人定期采取不同的措施。 我想在同一张图表上用图形表示这些时间序列中的2个(没问题),并添加一个取决于第三个因素的背景。

这是我所做的事情的可复制示例:

df <- data.frame(
  x = seq(1, 20),
  y = sample(c(1:10), 20, replace = TRUE),
  z = sample(c(1:10), 20, replace = TRUE),
  w = sample(c("yes", "no"), 20, replace = TRUE)
)

ggplot(df) +
  geom_line(aes(x = x, y = y), color = 'darkorange') +
  geom_line(aes(x = x, y = z), color = 'royalblue') +
  geom_raster(aes(x = x, y = 5, fill = w, alpha = w)) +
  scale_alpha_ordinal(range = c(0, 0.8)) +
  scale_fill_manual(values = c("gray32", "gray32"))

除了我希望栅格覆盖整个y轴窗口之外,这几乎给了我想要的一切。

有什么主意吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为在这里使用geom_rect最简单:

ggplot(df) +
  geom_line(aes(x = x, y = y), color = 'darkorange') +
  geom_line(aes(x = x, y = z), color = 'royalblue') +
  geom_rect(aes(xmin = x - 0.5, xmax = x + 0.5, 
                ymin = -Inf, ymax = Inf, fill = w, alpha = w)) +
  scale_alpha_ordinal(range = c(0, 0.8)) +
  scale_fill_manual(values = c("gray32", "gray32"))

enter image description here

使用geom_tilegeom_raster也是可能的,但是如果我不喜欢coord_cartesian,就无法获得覆盖整个垂直空间的范围。