使用xts在R中绘制具有不同时间索引的多个时间序列

时间:2014-02-15 11:47:46

标签: r plot xts

使用R,我有几个时间序列,他们有不同的时间索引,如

 date.a<-seq(as.Date('2014-01-01'),as.Date('2014-02-01'),by = 2)
 date.b<-seq(as.Date('2014-01-01'),as.Date('2014-02-15'),by = 3)
 df.a <- data.frame(time=date.a, A=sin((1:16)*pi/8))
 df.b <- data.frame(time=date.b, B=cos((1:16)*pi/8))

我使用

将它们合并为一个xts时间序列
my.ts <- merge(xts(df.a$A,df.a$time),xts(df.b$B,df.b$time))

我希望将它们显示在不同的面板上,或者以不同的颜色显示在一起。

更新

使用xtsExtra,我可以使用以下命令在一个绘图中或在单独的面板中显示两个系列:

#one panel, different colors
plot(my.ts, screens=1, type="p")
#two panels, same color
plot(my.ts, screens=c(1,2), type="p")

此方法仅适用于type="p" - 绘图线不会显示整个系列,并会产生不连续性。这可能是由合并系列引起的NA引起的。我必须使用哪些选项来处理这些NA?我找到了一些,但我不相信他们是最好的方式。

  1. na.omit(my.ts)na.exclude(my.ts)似乎过于贪婪 - 他们只保留两列不是NA的行。如何将此行为仅以行方式操作?
  2. na.approx(my.ts)填满NA,但我想知道这种线性近似是否会创建人工数据点,这会使情节看起来不同。
  3. 在我看来,最好的方法是一个可以传递给情节的选项,告诉我应该用NA做什么。有这样的事吗?

2 个答案:

答案 0 :(得分:2)

使用na.approx。另请注意,此处使用了已由xts加载的zoo:

z <- na.approx(as.zoo(my.ts))

# plot.zoo
plot(z, screen = 1, col = 1:2, ylab = "Y", xlab = "")

# xyplot.zoo
library(lattice)
xyplot(z, screen = 1, col = 1:2, ylab = "Y", xlab = "")

# autoplot.zoo
library(ggplot2)
autoplot(z, facet = NULL) + ylab("Y")

答案 1 :(得分:1)

也许你应该在没有xts的情况下做到这一点(不需要它) 使用ggplot2解决方案可能

    require(ggplot2)
ggplot()+geom_line(aes(x=time,y=A),data=df.a, col=2)+
  geom_line(aes(x=time,y=B),data=df.b,col=3) + ylab("")

ggplot2 two time series