如何在 R 中绘制时间序列数据,根据因子数据改变背景?
How to plot time series data in R, changing background according to factor data?
假设我有一些时间序列数据,如下所示:
df <- data.frame(Month=seq(1,12),
Value = rnorm(12,0,1),
Season = c('Winter', 'Winter', 'Spring',
'Spring', 'Spring', 'Summer',
'Summer', 'Summer', 'Fall',
'Fall', 'Fall', 'Winter'))
我想绘制随时间变化的值并显示它与季节的关系。绘制值很容易,例如:
ggplot(data, aes(Month, Value)) + geom_line()
在 ggplot 或基础图形中:
plot(Value~Month, data=df, type='l')
我想做的是引人注目地叠加一个因素。我想根据 x 轴上的月份更改背景颜色。所以,在我的例子中,左边的 1/6 是冬天的白色,然后向右移动的下一个三分之一是黄色的 spring,然后是夏天的下一个红色的三分之一,等等,直到最右边的 1/12又会变白
对于时间序列数据,这些似乎应该是简单易行的事情,但我在任何图形包中都找不到有关如何执行此操作的任何帮助。任何建议或见解将不胜感激!
在基础 R 中,您可以执行以下操作:
plot(Value~Month, type="n")
rect(df$Month-0.5, min(df$Value), df$Month+0.5, max(df$Value), col=df$Season, lty=0)
lines(Value~Month, data=df, type='l', col="orange", lwd=2)
并为可怕的基础配色方案道歉我将把它放在这里来说明:
要在 ggplot2
中执行相同操作,您可以执行以下操作:
ggplot(df, aes(Month, Value, Season)) +
geom_rect(aes(NULL, NULL,
xmin=Month-0.5, xmax=Month+0.5,
ymin=min(Value), ymax=max(Value),
fill=Season
)) +
geom_line()
产生以下结果:
这是一个开始,使用 geom_rect
,从 here 复制:
seasons <- data.frame(xstart = seq(0, 9, 3), xend = seq(3, 12, 3), col = letters[1:4])
ggplot() + geom_line(data = df, aes(x = Month, y = Value)) +
geom_rect(data = seasons, aes(xmin = xstart,
xmax = xend, ymin = -Inf, ymax = Inf, fill = col), alpha = 0.4)
假设我有一些时间序列数据,如下所示:
df <- data.frame(Month=seq(1,12),
Value = rnorm(12,0,1),
Season = c('Winter', 'Winter', 'Spring',
'Spring', 'Spring', 'Summer',
'Summer', 'Summer', 'Fall',
'Fall', 'Fall', 'Winter'))
我想绘制随时间变化的值并显示它与季节的关系。绘制值很容易,例如:
ggplot(data, aes(Month, Value)) + geom_line()
在 ggplot 或基础图形中:
plot(Value~Month, data=df, type='l')
我想做的是引人注目地叠加一个因素。我想根据 x 轴上的月份更改背景颜色。所以,在我的例子中,左边的 1/6 是冬天的白色,然后向右移动的下一个三分之一是黄色的 spring,然后是夏天的下一个红色的三分之一,等等,直到最右边的 1/12又会变白
对于时间序列数据,这些似乎应该是简单易行的事情,但我在任何图形包中都找不到有关如何执行此操作的任何帮助。任何建议或见解将不胜感激!
在基础 R 中,您可以执行以下操作:
plot(Value~Month, type="n")
rect(df$Month-0.5, min(df$Value), df$Month+0.5, max(df$Value), col=df$Season, lty=0)
lines(Value~Month, data=df, type='l', col="orange", lwd=2)
并为可怕的基础配色方案道歉我将把它放在这里来说明:
要在 ggplot2
中执行相同操作,您可以执行以下操作:
ggplot(df, aes(Month, Value, Season)) +
geom_rect(aes(NULL, NULL,
xmin=Month-0.5, xmax=Month+0.5,
ymin=min(Value), ymax=max(Value),
fill=Season
)) +
geom_line()
产生以下结果:
这是一个开始,使用 geom_rect
,从 here 复制:
seasons <- data.frame(xstart = seq(0, 9, 3), xend = seq(3, 12, 3), col = letters[1:4])
ggplot() + geom_line(data = df, aes(x = Month, y = Value)) +
geom_rect(data = seasons, aes(xmin = xstart,
xmax = xend, ymin = -Inf, ymax = Inf, fill = col), alpha = 0.4)