gpt4 book ai didi

r - 在R中使用geom_rect进行时间序列着色

转载 作者:行者123 更新时间:2023-12-03 13:22:08 26 4
gpt4 key购买 nike

我正在尝试对时间序列图的某个部分进行阴影处理(有点像衰退阴影-与this article on recession shading in excel底部的图形类似)。我将一些可能很笨拙的示例放在一起进行说明。
我首先创建一个时间序列,用ggplot2对其进行绘制,然后要使用geom_rect提供阴影。但是我必须在论点中弄错一些。

a<-rnorm(300)
a_ts<-ts(a, start=c(1910, 1), frequency=12)
a_time<-time(a_ts)
a_series<-ts.union(big=a_ts, month=a_time)
a_series_df<-as.data.frame(a_series)
ggplot(a_series)+
geom_line(mapping=aes_string(x="month", y="big"))+
geom_rect(
fill="red",alpha=0.5,
mapping=aes_string(x="month", y="big"),
xmin=as.numeric(as.Date(c("1924-01-01"))),
xmax=as.numeric(as.Date(c("1928-12-31"))),
ymin=0,
ymax=2
)

请注意,我也曾尝试过,但也没有用。
geom_rect(
fill="red",alpha=0.5,
mapping=aes_string(x="month", y="big"),
aes(
xmin=as.numeric(as.Date(c("1924-01-01"))),
xmax=as.numeric(as.Date(c("1928-12-31"))),
ymin=0,
ymax=2)
)

最佳答案

代码工作正常,xmin和xmax需要转换为十进制日期,请参见下文,需要使用lubridate软件包。

library("lubridate")
library("ggplot2")

ggplot(a_series_df)+
geom_line(mapping = aes_string(x = "month", y = "big")) +
geom_rect(
fill = "red", alpha = 0.5,
mapping = aes_string(x = "month", y = "big"),
xmin = decimal_date(as.Date(c("1924-01-01"))),
xmax = decimal_date(as.Date(c("1928-12-31"))),
ymin = 0,
ymax = 2
)

较干净的版本,先绘制阴影,使线条颜色不变。
ggplot() +
geom_rect(data = data.frame(xmin = decimal_date(as.Date(c("1924-01-01"))),
xmax = decimal_date(as.Date(c("1928-12-31"))),
ymin = -Inf,
ymax = Inf),
aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
fill = "grey", alpha = 0.5) +
geom_line(data = a_series_df,aes(month, big), colour = "blue") +
theme_classic()

关于r - 在R中使用geom_rect进行时间序列着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29648907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com