首页 > 解决方案 > 如何将 geom_rect 添加到 geom_line 图中

问题描述

我正在绘制一个时间序列的回报,并希望使用 NBER 衰退约会来掩盖衰退,就像 FRED 图表一样。

衰退变量在同一数据框中,是 1、0 变量:1 = 衰退,0 = 扩张。

这个想法是使用 geom_rect 和 alpha = (Recession == 1) 来遮蔽 Recession == 1 的区域。

gg_plot 的代码如下。谢谢您的帮助!

ERVALUEplot <- ggplot(data = Alldata)+
  geom_line(aes(x = Date, y = ERVALUE), color = 'red')+ 
  geom_rect(aes(x = Date, alpha = (Alldata$Recession ==1)), color = 'grey')

标签: rggplot2data-visualization

解决方案


我认为您的情况可能会通过使用geom_tile()而不是geom_rect(). 输出相同,但参数化更容易。

我假设您的数据的结构大致如下:

library(ggplot2)
set.seed(2)

Alldata <- data.frame(
  Date = Sys.Date() + 1:10,
  ERVALUE = cumsum(rnorm(10)),
  Recession = sample(c(0, 1), 10, replace = TRUE)
)

有了这些数据,我们可以在任何地方制作灰色矩形recession == 1,如下所示。在这里,我已将其映射到比例以自动生成图例。

ggplot(Alldata, aes(Date)) +
  geom_tile(aes(alpha = Recession, y = 1), 
            fill = "grey", height = Inf) +
  geom_line(aes(y = ERVALUE), colour = "red") +
  scale_alpha_continuous(range = c(0, 1), breaks = c(0, 1))

reprex 包于 2021-08-25 创建(v1.0.0)


推荐阅读