2017-10-04 69 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