【问题标题】:How to plot time series data in R, changing background according to factor data?如何在 R 中绘制时间序列数据,根据因子数据改变背景?
【发布时间】:2015-09-11 06:03:45
【问题描述】:

假设我有一些时间序列数据,如下所示:

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 是冬天的白色,然后向右移动的下三分之一是春天的黄色,然后是夏天的下一个三分之一的红色,等等,直到最右边的 1/12 再次变成白色.

对于时间序列数据,这些似乎应该是简单易行的,但我在任何图形包中都找不到有关如何执行此操作的任何帮助。任何建议或见解将不胜感激!

【问题讨论】:

  • zoo 包为tszoo 时间序列对象提供了xblocks() 函数,以促进此类显示。见example(“xblocks“, package = “zoo“)

标签: r plot ggplot2 time-series


【解决方案1】:

这是一个开始,使用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)

【讨论】:

    【解决方案2】:

    在基础 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()
    

    产生以下内容:

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 2018-01-23
      • 2012-10-11
      • 2020-08-06
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多