I want to make multiple ggplot in a loop and show them on one plot.
for ( i in 1:8) {
g <- ggplot(data=mtcars, aes(x=hp, y=wt))+
geom_point()
Note that, in the loop you provided, the counter i
isn't referenced in the plot, so you'll end up printing the same plot eight times!
If you have a bunch of different subsets of a single dataset and want to lay them out, you can follow @PKumar's comment and check out facetting in ggplot2. It essentially splits your data up into groups according to one or more of your columns and then lays them out in a grid or a ribbon.
On the other hand, if you have a bunch of a different plots that you want to combine on one page, there're a couple of packages that can make this happen:
Hope those help!
You can save all the plot in a list
then use either cowplot::plot_grid()
or gridExtra::marrangeGrob()
to put them in one or more pages
See also:
Creating arbitrary panes in ggplot2 (patchwork
, multipanelfigure
& egg
packages)
Multiple plots in for loop
library(tidyverse)
# create a list with a specific length
plot_lst <- vector("list", length = 8)
for (i in 1:8) {
g <- ggplot(data = mtcars, aes(x = hp, y = wt)) +
geom_point()
plot_lst[[i]] <- g
}
# Combine all plots
cowplot::plot_grid(plotlist = plot_lst, nrow = 4)
library(gridExtra)
ml1 <- marrangeGrob(plot_lst, nrow = 2, ncol = 2)
ml1
Created on 2018-09-20 by the reprex package (v0.2.1.9000)