3

你好,

我已经为这个问题苦苦挣扎了一段时间,任何能帮助我的人我都会非常感激。

首先,我正在处理包含多个时间序列的单个数据框中的时间序列数据。太多,无法单独输出到图表中。我尝试通过 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() 应该有助于做到这一点,但我一生都无法弄清楚。任何帮助是极大的赞赏。

谢谢,

-齐亚

编辑 -

正如 Arun 指出的那样,我正在尝试保存我的 goodlocs df 按“Loc”分割的 250 个不同图形的 .pdf,其中包含用于数据审查的点和线几何图形......

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

4

1 回答 1

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并为每个子集创建图。拆分部分是使用基本上将 a作为输入并提供 a作为输出的plyr函数完成的。绘图元素存储在与子集对应的列表的每个元素中。然后,我们使用包的功能来排列多个图(它也有非常有用的和参数来设置参数)。然后,您可以使用from保存它。dlplydata.framelistgridExtramarrangeGrobnrowncolggsaveggplot2

我将留给您可能需要的任何其他调整。

于 2013-04-15T22:40:50.613 回答