2017-08-16 57 views
0

我必須在我的數據上運行許多ggplots,所以我試圖通過變量循環。我想用grid_extra將這些圖放置在網格佈局中。我設法爲循環編寫代碼,以便爲我的列表創建圖,但我不確定如何將其擴展到網格外。這裏是我的代碼:在使用ggplot2循環後使用grid_extra

data("mtcars") 
mtcars$gear=as.factor(mtcars$gear) 

lflist=list("mpg", "hp", "drat", "wt") 
lfplot=list() 
for(i in seq_along(lflist)) { 
    lfplot=ggplot(data=subset(mtcars, !is.na(gear)), aes(x=gear, 
    y=lflist[i]))+geom_boxplot()+ 
    stat_summary(fun.y=median, geom="line", aes(group=1), colour="red")+ 
    stat_summary(fun.y=median, geom="point", colour="red")+ 
    theme(axis.text.x=element_text(size=8),axis.title.x = element_blank()) 

} 
+1

當試圖繪製其中一個時出現錯誤:'錯誤:stat_boxplot需要以下缺失美學:y'您在哪裏定義'y'?在製作劇情列表之前,你確定你可以繪製每個劇情嗎? – Masoud

+0

謝謝你的回覆。我在'lflist'中定義了我的y - 這些是我正在循環的變量。我重新運行代碼並沒有收到錯誤。 –

+0

我認爲@Masoud是正確的。我必須使用'aes_string'修改你的代碼,如下所示。 – Lyngbakr

回答

1

在這裏你去。我們還在內嵌評論中添加了一些提示。讓我們知道是否有什麼不清楚的。

library(ggplot2) 

data("mtcars") 
mtcars$gear=as.factor(mtcars$gear) 

# In such simple cases, it is advisable to use vectors rather than list 
# lflist = list("mpg", "hp", "drat", "wt") 
lflist = c("mpg", "hp", "drat", "wt") 
lfplots = list() 

for(i in seq_along(lflist)) { # Hint, you can loop directry over the entries (for element in lflist) 
    # Create your plot 
    lfplot = ggplot(data=subset(mtcars, !is.na(gear)), aes(x=gear, y=lflist[i])) + 
    geom_boxplot()+ 
    stat_summary(fun.y=median, geom="line", aes(group=1), colour="red") + 
    stat_summary(fun.y=median, geom="point", colour="red") + 
    theme(axis.text.x=element_text(size=8), 
      axis.title.x = element_blank()) 

    # Add your plot to the list 
    lfplots[[length(lfplots) + 1]] = lfplot 
} 


library(gridExtra) 
grid.arrange(grobs = lfplots, nrow = 2, ncol = 2) 
+0

非常感謝!完美工作。 –

1

我會用cowplot

data("mtcars") 
mtcars$gear=as.factor(mtcars$gear) 

lflist=list("mpg", "hp", "drat", "wt") 
lfplot=list() 
for(i in seq_along(lflist)) { 
    lfplot[[i]] <- ggplot(data=subset(mtcars, !is.na(gear)), aes_string(x="gear",y=lflist[[i]])) + geom_boxplot() + 
    stat_summary(fun.y=median, geom="line", aes(group=1), colour="red")+ 
    stat_summary(fun.y=median, geom="point", colour="red")+ 
    theme(axis.text.x=element_text(size=8),axis.title.x = element_blank()) 
} 

library(cowplot) 

plot_grid(plotlist = lfplot) 

enter image description here

+0

很多很多謝謝 - 使用我的數據。 –