r - 如何将 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')
解决方案
我认为您的情况可能会通过使用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)
推荐阅读
- mysql - 更新率窗函数法
- datetime - 在 Power BI Desktop 中定义今天的日期
- java - java real 中的优先级会影响执行顺序吗?
- foreach - CMake Release和Debug运行不同的std :: for_each单线程/多线程c ++ 17
- javascript - React-Table useTable 未定义(无 Node.js)
- python - Altair:如何以预定义的缩放开始交互式标称条形图?
- c++ - C++ 指针和内存分配
- c++ - 使用 C++ 的可索引跳过列表实现
- javascript - 跨域索引数据库存储
- sql - 如果没有条件,Postgresql 左连接显示空值