2个因子子集的自动绘图生成

时间:2014-04-02 13:34:53

标签: r plot ggplot2

我正在尝试根据两个因素的DF子集编写自动绘图生成器。

我一步一步解释自己。以下是我DF的一部分:

YEAR    RN  DATE    NOM SITE    LONG    SP  SUMNB   NB100   DIFF    IA
2001    RNN066  2001-04-26  RAVIN DE VALBOIS    RNN066-Valbois Pel     Humbert  231 Aphantopus hyperantus (Linnaeus, 1758)  0.000000    0.0000000   NA     NA
2001    RNN066  2001-07-04  RAVIN DE VALBOIS    RNN066-Valbois Pel Humbert  231 Aphantopus hyperantus (Linnaeus, 1758)  4.000000    1.7316017   69  59.740260
2001    RNN066  2001-07-17  RAVIN DE VALBOIS    RNN066-Valbois Pel Pogo 231 Aphantopus hyperantus (Linnaeus, 1758)  2.000000    0.8658009   13  5.627706
2001    RNN066  2001-08-01  RAVIN DE VALBOIS    RNN066-Valbois Pel Pogo 231 Aphantopus hyperantus (Linnaeus, 1758)  2.000000    0.8658009   15  6.493506
2001    RNN066  2001-10-03  RAVIN DE VALBOIS    RNN066-Valbois Pel Humbert  231 Aphantopus hyperantus (Linnaeus, 1758)  0.000000    0.0000000   63  0.000000
2001    RNN066  2001-04-26  RAVIN DE VALBOIS    RNN066-Valbois Pel Humbert  231 Aporia crataegi (Linnaeus, 1758)    0.000000    0.0000000   NA  NA
2001    RNN066  2001-06-04  RAVIN DE VALBOIS    RNN066-Valbois Pel Humbert  231 Aporia crataegi (Linnaeus, 1758)    4.000000    1.7316017   39  33.766234
2001    RNN066  2001-06-21  RAVIN DE VALBOIS    RNN066-Valbois Pel Pogo 231 Aporia crataegi (Linnaeus, 1758)    16.000000   6.9264069   17  58.874459
2001    RNN066  2001-06-28  RAVIN DE VALBOIS    RNN066-Valbois Pel Humbert  231 Aporia crataegi (Linnaeus, 1758)    16.000000   6.9264069   7   24.242424
2001    RNN066  2001-07-04  RAVIN DE VALBOIS    RNN066-Valbois Pel Pogo 231 Aporia crataegi (Linnaeus, 1758)    2.000000    0.8658009   6   2.597403

我想为每个SP + SITE组合绘制YEAR~IA的图。 我尝试应用函数,但它没有考虑我的ggplot()作为一个函数出于不明原因而ddply()不适合。

我会得到大量的情节(数千)所以我需要设置正确。这就是为什么我想在剧情的标题上写下SITE名称和SP名称,以及根据SITE和SP保存每个名称的名称。我所有尝试命名每个因子的当前值都失败了。

我考虑过循环,但这可能是一个耗时的命令。

编辑:

这是我的尝试:

tapply(SUBTOT$SITE,SUBTOT$SP,function(x){
  ggplot(SUBTOT, aes(YEAR, IA))+
    geom_point(size=3) +
    geom_line(size=1) +
    ggtitle("IA Evolution")+
    theme_bw()+
    theme(legend.direction ="vertical",legend.position = "bottom")+
    guides(color=guide_legend(ncol=2))
} )

它针对每个SP而不是每个SITE值运行,从而产生相同的图。

1 个答案:

答案 0 :(得分:0)

在您的函数function(x){ ... }中,您实际上从未致电x,而是使用原始数据SUBTOT。这就是为什么你多次获得相同的情节的原因。我也不认为tapply是合适的功能。我会使用dlply包中的plyr代替。这是我的解决方案:

require(plyr)
p <- dlply(SUBTOT, .(SITE, SP),function(x){
  ggplot(x, aes(YEAR, IA))+
    geom_point(size=3) +
    geom_line(size=1) +
    ggtitle("IA Evolution")+
    theme_bw()+
    theme(legend.direction ="vertical",legend.position = "bottom")+
    guides(color=guide_legend(ncol=2))
})
# only run the following if you want to actually print all your (thousands) of plots. 
# you may want to save them (ggsave) instead. 
lapply(p, print)