来自单个数据帧的多个或多个时间序列绘图输出

时间:2013-04-15 21:40:57

标签: r time-series apply par

您好,

我一直在努力解决这个问题,而且任何可以帮助我的人都会非常感激。

首先,我正在使用包含多个时间序列的单个数据框中的时间序列数据。太多,无法单独输出到图表中。我试过通过ddply()传递qplot()但是r告诉我它qplot不是函数,因此它不起作用。

我的数据结构就是这样......

goodlocs <- 
 Loc    Year    dir
Artesia 1983    1490
Artesia 1984    1575
Artesia 1986    1567
Artesia 1987    1630
Artesia 1990    1680
Bogota  1983    1525
Bogota  1984    1610
Bogota  1985    1602
Bogota  1986    1665
Bogota  1990    1715
Carlsbad    1983    1560
Carlsbad    1985    1645
Carlsbad    1986    1637
Carlsbad    1987    1700
Carlsbad    1990    1750
Carlsbad    1992    1595
Datil   1987    1680
Datil   1990    1672
Datil   1991    1735
Datil   1992    1785

我有大约250个位置(Locs),并且希望能够在图形上查看每个站点数据,如下所示,以便我可以直观地检查所有数据。

Artesia <- goodlocs[goodlocs$Loc == "Artesia",]

qplot(YEAR, dir, data = Artesia, geom = c("point", "line"), xlab = "Year", 
  ylab = "DIR", main = "Artesia DIR Over Record Period") + 
  geom_smooth(method=lm)

我知道Par()应该帮助做到这一点,但我无法弄清楚我的生活。任何帮助是极大的赞赏。

谢谢,

-Zia

编辑 -

正如阿伦所指出的那样,我正在努力保存250个不同图形的.pdf,这些图形由我的“好点”分割为“Loc”,点和线几何图形用于数据审查....

我也尝试通过qplot传递我的df的ddply作为数据,但它也没有用,我不是真的期待它,但我不得不尝试。

1 个答案:

答案 0 :(得分:2)

这个怎么样?

require(ggplot2)
require(plyr)
require(gridExtra)
pl <- dlply(df, .(Loc), function(dat) {
    ggplot(data = dat, aes(x = Year, y = dir)) + geom_line() + 
    geom_point() + xlab("x-label") + ylab("y-label") + 
    geom_smooth(method = "lm")
})

ml <- do.call(marrangeGrob, c(pl, list(nrow = 2, ncol = 2)))
ggsave("my_plots.pdf", ml, height = 7, width = 13, units = "in")

想法:首先按Loc分割数据并为每个子集创建绘图。拆分部分使用plyr函数dlply完成,该函数基本上以data.frame作为输入,并提供list作为输出。绘图元素存储在与子集对应的列表的每个元素中。然后,我们使用gridExtra包的marrangeGrob函数来排列多个图(其中还有非常有用的nrowncol参数来设置参数。然后,您可以使用ggsave中的ggplot2保存它。

我会留下您可能需要的任何其他调整。