'Plot Layout of Base R Plots Saved by recordPlot() Function

I can use the recordPlot() function to save Base R plots in data objects:

plot(1:5, 1:5)
my_plot1 <- recordPlot()

plot(1:10, 1:10)
my_plot2 <- recordPlot()

plot(1:20, 1:20)
my_plot3 <- recordPlot()

I would like to draw these three plots in a grid of plots. Usually, I could use the layout function for this. However, this does not work when I want to draw plots created by recordPlot.

This does not work:

layout(matrix(c(1, 0, 2, 3), ncol = 2))

plot.new()

my_plot1
my_plot2
my_plot3

How can I draw a grid of plots saved by the recordPlot() function?



Solution 1:[1]

I recently had to solve a similar problem, below are two solutions that may work for you.

(1) use par() to specify numbers of rows/ columns:

# create objects with base plots
plot(rnorm(50),rnorm(50))
my_plot1 <- recordPlot()

plot(rnorm(50),rnorm(50))
my_plot2 <- recordPlot()

plot(rnorm(50),rnorm(50))
my_plot3 <- recordPlot()

# clear plots in workspace
plot.new()

# plot side by side 
par(mfrow= c(1,3)) # specify rows (1) and columns (3) for plotting 
my_plot1
my_plot2
my_plot3

(2) Save objects to a list and then use plot_grid (cowplot library) - this is good if you need to export the figure:

library(cowplot)

# create empty list
p <- list()

# save objects to list 
plot(rnorm(50),rnorm(50))
p[[1]] <- recordPlot()

plot(rnorm(50),rnorm(50))  
p[[2]] <- recordPlot()

plot(rnorm(50),rnorm(50))  
p[[3]] <- recordPlot()

# clear plots
plot.new()

# plot in 3 columns using plot_grid
plot_grid(plotlist = p, nrow=1, ncol=3)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 AWestell