1

df

  primer timepoints         mean          sde
   Acan          0 1.000000e+00 0.000000e+00
   Acan         20 9.547922e-01 1.729115e-01
   Acan         40 1.936454e+00 9.934593e-01
   Acan         60 1.261360e+00 2.232165e-01
   Acan        120 2.219807e+00 5.915425e-01
   Acan        240 2.540490e+00 5.651534e-01
   Acan        360 1.518923e+00 1.522455e-01
   Actb          0 1.000000e+00 0.000000e+00
   Actb         20 1.061931e+00 4.362860e-02
   Actb         40 8.835103e-01 1.196449e-01
   Actb         60 8.889279e-01 1.401378e-01
   Actb        120 1.001135e+00 7.770563e-02
   Actb        240 8.551348e-01 1.884853e-01
   Actb        360 7.343955e-01 1.824412e-01

这将数据视为每个引物在 1 df 中,但我想使用 ggplot2 为每个唯一引物制作散点图(y 轴是列平均值,x 轴是时间点),我可以在这里工作吗?

如果我能以某种方式应用一个理想的函数,一个绘图列表。

这是我一直用于 ggplot 的代码,我试图循环这个

 plot_gg  <-  function(x){

    ggplot(df,aes(x=timepoints,mean)) + 
            geom_point() + 
            geom_line() +
            scale_x_continuous(name='x axis') +
            scale_y_continuous(name='y axis') +
            geom_errorbar(aes(ymin=mean-sde,ymax=mean+sde),width=2) +
            opts(title = primer)    
    }

   desired_list <- lapply(unique(df$primer),plot_gg,df)

这是非常错误的,但是,我不确定是否应该根据每个单独的引物首先对 df 进行子集化。或者如果在数据所在的结构中使用 ggplot 会更容易

如果你能帮我指导一下就好了

4

1 回答 1

1

我认为缺少的部分是需要重做参数的定义geom_errorbar并添加facet_wrap. 如果您在布局中指定列数和行数,facet_warp您可以获得多个页面。另一种打印多页的方法是使用该grid::grid.newpage()功能。

 ggplot(df, aes(x = timepoints, y = mean, ymin = mean - sde, 
    ymax = mean + sde)) + 
 geom_errorbar() + geom_point() + geom_line() + 
 facet_wrap(~ primer) + 
 xlab('x axis') + ylab('y axis') + opts(title = "primer")

对于在下面的评论中添加并使用@Thierry 的编辑的多页请求:

pdf("twopage.pdf", onefile=TRUE)
   for ( i in unique(df$primer) ) { 
       g <- ggplot(df[df$primer == i, ], aes(x = timepoints, y = mean, ymin = mean - sde, 
       ymax = mean + sde)) + 
       geom_errorbar() + geom_point() + geom_line() + 
       facet_wrap(~ primer, ncol=1, nrow=1) + 
       xlab('x axis') + ylab('y axis') + opts(title = "primer") 
       print(g) ; cat(paste("printing", i, "\n"))}
   dev.off()
于 2012-08-21T06:13:39.180 回答