Open In App

How To Join Multiple ggplot2 Plots with cowplot?

Improve
Improve
Like Article
Like
Save
Share
Report

In this article, we are going to see how to join multiple ggplot2 plots with cowplot. To join multiple ggplot2 plots, we use the plot_grid() function of the cowplot package of R Language.

Syntax: plot_grid(plot1,plot2,label=<label-vector>, ncol, nrow)

Parameters:

  • plot1 and plot2 are plots that need to be joined.
  • <label-vector> is a vector that has a collection of labels for plots.
  • ncol is the number of columns canvas will be divided in.
  • nrow is the number of rows canvas will be divided in.

Example 1: Two basic ggplot2 plots combined using plot_grid() function.

R




# Create sample data
set.seed(5642)                             
sample_data1 <- data.frame(
  name = c("Geek1","Geek2","Geek3",
           "Geek4","Geeek5") ,
  value=c(31,12,15,28,45))
  
sample_data2 <- data.frame(x = rnorm(400))
  
# Load ggplot2 and cowplot
library("ggplot2"
library("cowplot")
  
# Create both plot and store in variable
plot1<-ggplot(sample_data1,
              aes(x = name, y = value)) +
geom_point(size=4)
  
plot2<-ggplot(sample_data2, aes(x = x)) +
geom_density(alpha=0.8)
plot_grid(plot1, plot2, labels = c('Plot1', 'Plot2'))


Output:

Output

Example 2: Create a gap between plots using NULL as plot value. 

To fix the number of columns we use ncol attribute of plot_grid() function.

R




# Create sample data
set.seed(5642)                             
sample_data <- data.frame(
  name = c("Geek1","Geek2","Geek3",
           "Geek4","Geeek5") ,
  value = c(31,12,15,28,45))
  
# Load ggplot2 and cowplot
library("ggplot2"
library("cowplot")
  
# Create both plot and store in variable
plot1<-ggplot(sample_data, aes(x=name, y=value)) +
geom_bar(stat = "identity")
  
plot2<-ggplot(sample_data, aes(x = name, y=value)) +
geom_segment( aes(x=name, xend=name, y=0, yend=value)) 
  
plot_grid(plot1,NULL, NULL, plot2, labels = c(
  'Plot1','','', 'Plot2'), ncol=2)


Output:

Output

Example 3: Side by Side plot with the shared legend.

To create a plot with a shared legend, we create plots without a legend and create a separate legend and combine them.

R




# Create sample data
set.seed(5642)                             
sample_data <- data.frame(name=c("Geek1","Geek2","Geek3",
                                 "Geek4","Geeek5") ,
                          value=c(31,12,15,28,45))
  
# Load ggplot2 and cowplot
library("ggplot2"
library("cowplot")
  
# Create both plot and store in variable without legend
plot1<-ggplot(sample_data, aes(x=name, y=value, fill=name)) +
geom_bar(stat = "identity") +
theme(legend.position = "none")
  
plot2<-ggplot(sample_data, aes(x = name, y=value, fill=name)) +  
geom_point(aes(colour = factor(name)), size = 6)+
theme(legend.position = "none")
  
# combine both plot using plot_grid()
combined_plot<-plot_grid(plot1, plot2,ncol=2)
  
# extract legend from plot2
legend <- get_legend(
  plot1 +
    guides(color = guide_legend(nrow = 1)) +
    theme(legend.position = "bottom")
)
  
# Combine combined plot and legend using plot_grid()
plot_grid(combined_plot, legend,ncol=1,rel_heights = c(1, .1))


Output:

Output

Example 4: Side by Side plot with a shared title

To create a plot with a shared title, we create plots without titles and create a separate title and combine them.

R




# Create sample data
set.seed(5642)                             
sample_data <- data.frame(name=c("Geek1","Geek2",
                                 "Geek3","Geek4","Geeek5") ,
                          value=c(31,12,15,28,45))
  
# Load ggplot2 and cowplot
library("ggplot2"
library("cowplot")
  
# Create both plot and store in variable without legend
plot1<-ggplot(sample_data, aes(x=name, y=value, fill=name)) +
geom_bar(stat = "identity") +
theme(legend.position = "none")
  
plot2<-ggplot(sample_data, aes(x = name, y=value, fill=name)) +  
geom_point(aes(colour = factor(name)), size = 6)+
theme(legend.position = "none")
  
# combine both plot using plot_grid()
combined_plot<-plot_grid(plot1, plot2,ncol=2)
  
# create title for plot
title <- ggdraw() + 
  draw_label(
    "Two Plots together with shared title",
    fontface = 'bold',
    x = 0,
    hjust = 0,
    size = 24,
  )
# Combine combined plot and title using plot_grid()
plot_grid(title, combined_plot ,ncol=1,rel_heights = c(0.1, 1))


Output:

Output



Last Updated : 17 Oct, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads