在使用ggplot2循环后使用grid_extra

时间:2017-08-16 13:07:24

标签: r

我必须在我的数据上运行许多ggplots,所以我试图循环变量。我想使用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())

}

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

答案 1 :(得分: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)