循环ggplot如何在循环内使用for循环变量i

时间:2014-05-19 23:55:03

标签: r plot ggplot2

我有一个数据帧(数据帧是什么?我,e并不重要)。 我正在使用它并绘制一些点曲线。如下所示

#EXP <- 3 (example)
#EXP_VEC <- c(1:EXP)

for (i in 1:EXP)
{
gg2_plot[i] <- ggplot(subset(gg2,Ei == EXP_VEC[i] ),aes(x=hours, y=variable, fill = Mi)) + geom_point(aes(fill = Mi,color = Mi),size = 3)
}

如您所见EXP_VEC = c(1,2,3 .......)(取决于用户输入Ex:如果用户输入2,则EXP_VEC = c(1,2))

Dataframe有Ei = 1,2,3,4,........

现在我必须根据用户输入对所有这些Ei值进行绘图。

考虑一下,EXP_VEC = 3 现在for循环应该为Ei = 1,Ei = 2和Ei = 3产生三个图 对于这个,如果我写的for循环工作,那么它将完成并完成。

但显然循环不起作用。我不能使用aes_string,因为变量&#34; i&#34;在aes()之外。

例如:考虑以下数据集

dd<-data.frame(
    Ei = c(1L, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2), 
    Mi = c(1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2), 
    hours = c(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3), 
    variable = c(0.1023488, 0.1254325, 0.1523245, 0.1225425, 0.1452354, 
    0.1853324, 0.1452369, 0.1241241, 0.0542232, 0.8542154, 0.021542, 
    0.2541254))

正如你所看到我有两套Ei,我想绘制Ei = 1的第一个图,然后在这个图旁边我想再次绘制Ei = 2。

所以我想在两个单独的变量中保存Ei = 1和Ei = 2的图,然后在某种类型的级联函数中使用,我还没有找到。 我该怎么做?

有没有一种简单的方法可以通过使用没有任何循环的ggplot来做到这一点? 如果没有,那么我怎么称呼&#34;我&#34;我的for循环中的值是什么?

1 个答案:

答案 0 :(得分:2)

我会做这样的事情:

plot_exp <- 
  function(i){
    dat <- subset(gg2,Ei == i )
    if (nrow(dat) > 0)
       ggplot(dat,aes(x=hours, y=variable, fill = Mi)) + 
              geom_point(aes(color = Mi),size = 3)
  }

ll <- lapply(seq_len(EXP), plot_exp)

ll是ggplot对象的图表列表。