【问题标题】:multiple ggplot2 in 1 data frame1个数据框中的多个ggplot2
【发布时间】:2012-08-16 10:22:03
【问题描述】:

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 轴将是时间点),我可以得到 lapply来这里工作?

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

这是我一直用于 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 会更容易

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

【问题讨论】:

    标签: r ggplot2


    【解决方案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()
    

    【讨论】:

    • 这会将每一个图都生成在一页上,而我想要每页一个图,或者只是一个图列表
    • 如果有 44 个引物,可以说 facet_wrap(~primer, ncol=4, nrow=2) 这行不通,我怎样才能让其余的不一定填满页面
    • 如果您发布的问题完全描述了您的问题的复杂性,您更有可能得到满意的答案。
    • 非常感谢,我不想打扰另一个问题,但是有没有一种简单的方法可以使用 lapply 并制作绘图列表,无需打印到 pdf 或任何东西,只需一个列表,每个元素是一个引物的情节?
    • 您可以跳过pdf 调用,然后绘图将在同一交互式设备上相互叠加打印....或者您可以在每次打印调用之前使用@ 创建新的绘图窗口987654328@.
    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 2010-12-05
    • 2018-07-31
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多