2017-10-04 66 views
0

我试图在for循环中创建三个不同的绘图,然后将它们一起绘制在同一个图形中。 我知道有些关于这个话题的问题已经被问到。但我不知道我做错了什么。为什么我的情节被覆盖。尽管如此,我尝试了两种解决方案(创建一个列表或使用assign函数),我不知道为什么我会在循环结束时覆盖我的绘图。防止在for循环中覆盖绘图

所以,第一个解决方案是创建一个列表:

library(gridExtra) 
library(ggplot2) 

out<-list() 
for (i in c(1,2,4)){ 
    print(i) 
    name= paste("WT.1",colnames([email protected][i]), sep=" ") 
    print(name) 
    out[[length(out) + 1]] <- qplot([email protected][i], 
       geom="density", 
       main= name) 
    print(out[[i]]) 
} 
grid.arrange(out[[1]], out[[2]], out[[3]], nrow = 2) 

当我打印在循环中的情节,我得到我想要的...但当然,他们不在一起。

First Plot

当我在最后绘制它们放在一起,我得到了所有的三个相同的情节:最后情节我做到了。

All together

这是第二个选项:分配功能。我也有完全一样的问题。

for (i in c(1,2,4)) { 
    assign(paste("WT.1",colnames([email protected][i]),sep="."), 
    qplot([email protected][i],geom="density", 
      main=paste0("WT.1",colnames([email protected][i])))) 
} 
+1

请上提供[再现的示例]读到(https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-可重现的例子),所以其他用户更容易为您提供帮助。 – shreyasgm

回答

1

对于每次迭代,您都缺少dev.off循环。下面再现的代码:

library(gridExtra) 
library(ggplot2) 

out<-list() 
for (i in c(1,2,3)){ 
    print(i) 

    out[[i]] <- qplot(1:100, rnorm(100), colour = runif(100)) 

    print(out[[i]]) 
    dev.off() 
} 
grid.arrange(out[[1]], out[[2]], out[[3]], nrow = 2) 

enter image description here