使用R中的ggplot2.zoo将动态线对象添加到现有绘图中

时间:2016-03-24 17:15:50

标签: r ggplot2 time-series zoo

我有100年的时间序列气候数据。 使用基础图,我可以使用以下代码绘制年度平均值,然后绘制10年平均值:

plot(smoothprcp1yrs, col = "GREY")
lines(smoothprcp10yrs, col = "RED")

使用ggplot.zoo,绘制年度均值的代码如下:

ggplot(aes(x=Index,y=Value),data=fortify(smoothMaxtmp1yrs,melt=TRUE))+geom_line()

smoothMaxtmp1yrs是我的对象。 是否可以使用ggplot.zoo在顶部添加另一行?

为了使其可重现,假设我的数据如下:

x.Date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-"))
x <- zoo(rnorm(5), x.Date)
xlow <- x - runif(5)
xhigh <- x + runif(5)

z <- cbind(x, xlow, xhigh)

y.Date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-"))
y <- zoo(rnorm(5), y.Date)
ylow <- y - runif(5)
yhigh <- y + runif(5)

a <- cbind(y, ylow, yhigh)

R基本情节如下:

plot(x)
lines(y, col = "red")

ggplot.zoo看起来像:

ggplot(aes(x = Index, y = Value), data = fortify(x, melt = TRUE)) +
  geom_line() + xlab("Index") + ylab("x")

绘制y:

ggplot(aes(x = Index, y = Value), data = fortify(y, melt = TRUE)) +
  geom_line() + xlab("Index") + ylab("x")

如何在x上添加y?

2 个答案:

答案 0 :(得分:2)

使用ggplot图形合并动画片系列,然后使用autoplot.zoo来绘制x和y。参数facet = NULL告诉它不要为每个系列创建一个单独的面板。

library(zoo)
library(ggplot2)

autoplot(merge(x, y), facet = NULL) + ylab("Temperature")

screenshot

答案 1 :(得分:1)

一种方法是提前将rbind的{​​{1}}输出合并到fortify中:

data.frame

然后你可以将df <- do.call("rbind", list(fortify(y, melt = TRUE), fortify(x, melt = TRUE))) head(df) # Index Series Value # 1 2003-02-01 y -0.4688883 # 2 2003-02-03 y 1.2038141 # 3 2003-02-07 y 1.2194155 # 4 2003-02-09 y 0.9252823 # 5 2003-02-14 y 0.3187009 # 6 2003-02-01 x 0.2150564 传递给Seriesgroup美学:

color

Plot