【问题标题】:Plotting a discontinued time-series object绘制一个中断的时间序列对象
【发布时间】:2013-11-28 22:53:23
【问题描述】:

考虑这个动物园对象的(简单的)版本:

d <-  c("2007-01-31", "2007-02-28", "2007-03-31", "2007-04-30", "2007-05-31", "2007-06-30", "2008-02-28", "2008-03-31", "2008-04-30", "2009-09-30", "2009-10-31", "2009-11-30", "2009-12-31", "2010-01-31")
vec <- runif(14, 0.5, 0.7)
vec.zoo = zoo(vec, order.by = as.Date(d, format = "%Y-%m-%d"))
plot(vec.zoo, ylim = c(0,1))

如您所见,缺少一些日期(查看索引 d)。但是,当我绘制对象时,我得到以下信息:

我意识到这对ggplot 是可行的,但是结果是多个图而不是一个(请参阅线程:link)

我希望能够在一个绘图中绘制动物园对象,但是当特定日期没有可用数据时,在绘图中留下一个空白区域。我该怎么做?

谢谢!

【问题讨论】:

    标签: r plot time-series zoo


    【解决方案1】:

    假设您的数据频率是“每月”:

    library(zoo)
    library(lubridate) # for easy extraction of different components of date object
    
    # convert 'd' to monthly data
    d2 <- as.yearmon(d)
    
    
    # create zoo object
    z1 <- zoo(vec, order.by = d2)
    
    
    # create a continuous series of monthly data, ranging from min(d) to max(d)
    d3 <- as.Date(d)
    tt <- as.yearmon(min(year(d)) + seq(month(min(d)) - 1, (year(max(d)) - year(min(d))) * 12)/12)
    
    
    # expand z1 to a continuous series
    z2 <- merge(z1, zoo(, tt))
    
    
    plot(z2)
    

    【讨论】:

    • 我的数据频率确实是每月一次,这个答案就可以了。谢谢!
    • 很高兴听到您发现我的回答很有帮助!
    • 但是,我有一点小小的评论。我希望我不必显示所有数据不可用的日期,以减少空白...也许通过停止 x 轴..
    • 我从未在zoo 图中使用过不连续的 x 轴,我怀疑这是否可能。您可能希望查看plotrix 包中的gap.plot,或者尝试在ggplot2 中进行刻面。
    • @Mariam,请注意我已更新为seq(month(min(d)) - 1。来自?yearmon:““yearmon”类 [...] 将数据保存为年份加 0 一月份”。所以现在tt 从“jan 2007”开始运行。
    【解决方案2】:

    将vec 更改为以下:

    vec &lt;- c(runif(5, 0.5, 0.7), NA, NA, NA, runif(5, 0.5, 0.7))

    要进行中断,vec 对应的日期必须具有 NA 值,如果该日期没有数据则中断。

    【讨论】:

    • 嗯,这意味着我必须创建一个包含所有日期的索引,而不仅仅是我拥有数据的日期,然后用 NA 填充向量。不是很方便……
    • 使用seq() 和merge() 应该很容易,但同意还是不太方便。
    • 感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 2013-05-15
    • 2019-12-02
    • 2021-07-14
    • 2014-07-20
    • 2014-05-16
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    相关资源
    最近更新 更多