基于指标的阴影 stock/date 图
Shading stock/date plot based on indicator
我的问题是我有一些股票价格(数字)是根据日期(字符串)绘制的。现在我有一个指示变量。我想为指标为 1 的那些日期绘制图表上的区域,而不是为 0 时绘制阴影。我在 R 中编程。我知道如何在预先指定的时间间隔内执行此操作,例如 2000-01-01到 2001-01-01。但是我有很多“间隔”,其中指标变量显示 1,我不想自己计算它们。关于如何克服这个障碍的任何想法?如果可能的话,我希望它通过 ggplot2。
我的数据示例:
data <- data.frame(
date = as.Date(c("2001-01-01", "2001-01-02", "2001-01-03",
"2001-01-04","2001-01-05","2001-01-06", "2001-01-07",
"2001-01-08","2001-01-09","2001-01-10")),
price = c(623.3,515.2,611.0,729.0,843.25,623.3,515.2,611.0,729.0,843.25),
indicator = c(1,1,1,0,0,0,1,1,1,0)
)
注意:我之前问过这个问题,但它被标记为重复。我不这么认为,因为我找不到任何其他 post 可以真正回答我的问题。我看到其他人也有同样的问题,但答案总是指定你自己的阴影范围,这不是这里的目的。
答案是您需要使用您的数据来创建阴影背景区域。
library(ggplot2)
background_df <- data[data$indicator == 1,]
background_df$end <- background_df$date + lubridate::days(1)
ggplot(data, aes(date, price)) +
geom_rect(ymin = -Inf, ymax = Inf, aes(xmin = date, xmax = end),
data = background_df, fill = "deepskyblue4", alpha = 0.2) +
geom_line(colour = "orange3") +
geom_point() +
theme_bw()
由 reprex package (v2.0.1)
创建于 2022-03-06
我的问题是我有一些股票价格(数字)是根据日期(字符串)绘制的。现在我有一个指示变量。我想为指标为 1 的那些日期绘制图表上的区域,而不是为 0 时绘制阴影。我在 R 中编程。我知道如何在预先指定的时间间隔内执行此操作,例如 2000-01-01到 2001-01-01。但是我有很多“间隔”,其中指标变量显示 1,我不想自己计算它们。关于如何克服这个障碍的任何想法?如果可能的话,我希望它通过 ggplot2。
我的数据示例:
data <- data.frame(
date = as.Date(c("2001-01-01", "2001-01-02", "2001-01-03",
"2001-01-04","2001-01-05","2001-01-06", "2001-01-07",
"2001-01-08","2001-01-09","2001-01-10")),
price = c(623.3,515.2,611.0,729.0,843.25,623.3,515.2,611.0,729.0,843.25),
indicator = c(1,1,1,0,0,0,1,1,1,0)
)
注意:我之前问过这个问题,但它被标记为重复。我不这么认为,因为我找不到任何其他 post 可以真正回答我的问题。我看到其他人也有同样的问题,但答案总是指定你自己的阴影范围,这不是这里的目的。
答案是您需要使用您的数据来创建阴影背景区域。
library(ggplot2)
background_df <- data[data$indicator == 1,]
background_df$end <- background_df$date + lubridate::days(1)
ggplot(data, aes(date, price)) +
geom_rect(ymin = -Inf, ymax = Inf, aes(xmin = date, xmax = end),
data = background_df, fill = "deepskyblue4", alpha = 0.2) +
geom_line(colour = "orange3") +
geom_point() +
theme_bw()
由 reprex package (v2.0.1)
创建于 2022-03-06