2017-03-02 43 views
0

我將多個ggplots保存到列表中,以便在隨後的多槽中使用。圖形在循環中生成並附加到列表中,但循環後,列表中的所有繪圖對象都與循環的最後一個繪圖相同。我之前完成過這種操作,沒有任何問題。有沒有人遇到過相同的問題,並解決了這個問題?列表中的多個ggplot對象在循環中被更改

figList <- list() 

aoinum <- 1 
for (aoi in AOI_list){ 
    ... 
    # prepare dataframe for plotting 
    dat <- data.frame(...) 

    fig <- ggplot(data=dat, aes(x=x, y=y, fill=z, alpha=q)) + 
     geom_bar(...)+ 
     ... 

    figList[[aoi]] <- fig 

    aoinum = aoinum + 1 
} 
+1

你可以提供一個可重複的例子嗎? –

+0

看起來您的情節總是相同的,只是數據不同而已。如果是這樣的話,不要製作新的情節,只做一次情節,並應用不同的數據:'lapply(list_of_data_frames,function(df)fig%+%df)'。一般來說,不要使用'for'循環通過追加來創建列表。這是低效和混亂的。改用列表函數。 –

+0

有些觀點: - 你使用aoinum變量是什麼? - 我會用一個數字索引來代替變量的名字或者任何'aoi'指的。 - 當你構建dat時,問題可能出現在「隱藏」代碼中。 – R18

回答

0

這是我設法使地塊的名單在for循環

#Define list 
ggcluster<-list() 

for (cluster in 1:nclusters){ 
    # Simple plot)geom_polygon in my case) 
    ggcluster[[cluster]]<-ggplot() + 
    geom_polygon(data = datoshp.df, aes(long, lat, group = group)) 
} 

# Build multiplot panel (two columns) 

pngname<-paste(output_path,"plot-name",".png",sep="") 
png(pngname,width = 1000, height = 1000) 
do.call(grid.arrange, c(ggcluster,list(ncol=2))) 
dev.off()