gpt4 book ai didi

r - 使用 ggplot 绘制具有不同起点和终点的时间序列数据时对月份间隔进行阴影处理

转载 作者:行者123 更新时间:2023-12-01 12:25:31 24 4
gpt4 key购买 nike

我正在尝试使用 ggplot2 中的 geom_rect() 来遮蔽冬季月份,并且有许多具有不同起点和终点的不同时间序列数据。对于每个时间序列,我希望从每年的 11 月到 3 月这段时间有阴影(其余月份应该没有颜色)。

例如,具有以下时间序列

library(ggplot2)
library(lubridate)

now <- Sys.time()
set.seed(123)
datOne <- data.frame(IndID = "One",
DateTime = seq(from = now - dyears(0.2), length.out = 50, by = "months"),
Value = rnorm(50))

我可以定义一个新的数据框对象,其中包含每个阴影部分的起点和终点(即每年的 11 月至 3 月)

temp <- data.frame(
start = as.Date(c('2016-11-1', '2017-11-01', '2018-11-01', '2019-11-01')),
end = as.Date(c('2017-03-01', '2018-03-01', '2019-03-01', '2020-03-01')))

dateRanges <- data.frame(
start = as.POSIXct(temp [,1], "%Y-%m-%d")+ hours(6),
end = as.POSIXct(temp [,2], "%Y-%m-%d")+ hours(6))

然后画图。

ggplot(datOne) + 
geom_rect(data = dateRanges, aes(xmin = start , xmax = end, ymin = -Inf, ymax = Inf),
inherit.aes=FALSE, alpha = 0.4, fill = c("lightblue"))+
geom_line(aes(x= DateTime, y = Value), size = 1.5)

enter image description here

虽然这适用于单个时间序列,但我正在为许多单独的时间序列中的每一个制作一个单独的图形,每个时间序列都有不同的起点和终点,并且需要一个唯一的数据框来创建阴影区域。例如,如下图所示,将相同的 dateRanges 数据框应用于不同的时间序列显然不起作用。

datTwo <- data.frame(IndID = "Two",
DateTime = seq(from = now , length.out = 100, by = "months"),
Value = rnorm(100))

ggplot(datTwo) +
geom_rect(data = dateRanges, aes(xmin = start , xmax = end, ymin = -Inf, ymax = Inf),
inherit.aes=FALSE, alpha = 0.4, fill = c("lightblue"))+
geom_line(aes(x= DateTime, y = Value), size = 1.5)

是否有不同的方法来遮蔽两个时间序列,以便我可以为每个时间序列自动创建 dateRanges 或一起使用不同的方法(即注释...)。换句话说,考虑到需要在不同时期使用 100 个不同的时间序列制作大约 100 个不同的数字,那么对任何给定年份从 11 月到 3 月的时间段进行阴影处理的最佳方法是什么?

提前致谢。

enter image description here

最佳答案

我不知道这是否是“最佳”方法,但这是一个简单的方法:扩展您的 dateRanges 框架并重置轴的限制:

# let's make it past & future proof for the next few years: 
dateRanges <- data.frame(
start = seq(as.POSIXct("1900-11-01 07:00:00"), as.POSIXct("2100-11-01 07:00:00"), "1 year"),
end = seq(as.POSIXct("1901-03-01 07:00:00"), as.POSIXct("2101-03-01 07:00:00"), "1 year")
)
ggplot(datTwo) +
geom_rect(data = dateRanges, aes(xmin = start , xmax = end, ymin = -Inf, ymax = Inf),
inherit.aes=FALSE, alpha = 0.4, fill = c("lightblue"))+
geom_line(aes(x= DateTime, y = Value), size = 1.5) +
coord_cartesian(xlim = range(datTwo$DateTime))

enter image description here

关于r - 使用 ggplot 绘制具有不同起点和终点的时间序列数据时对月份间隔进行阴影处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40331685/

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