首页 > 解决方案 > 如何在 geom_raster 中设置一个常量“ylim”?

问题描述

我有一种“时间序列”,在同一个人的固定时间点采取不同的措施。我想在同一个图表上以图形方式表示这些时间序列中的 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 轴窗口。

任何想法?

谢谢!

标签: rggplot2geom-raster

解决方案


我认为在这里使用 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"))

在此处输入图像描述

可能也可以使用geom_tileand geom_raster,但是如果不摆弄coord_cartesian.


推荐阅读