Skip to content
Related Articles

Related Articles

Improve Article

Divide Legend of ggplot2 Plot in R

  • Last Updated : 29 Jun, 2021

In this article, we will discuss how to divide the legend of ggplot2 plot in the R programming language.

To divide the legend of the ggplot2 plot, the user needs to install and import the gridExtra and cowplot packages in the R console.

  • gridExrta package: Provides a number of user-level functions to work with “grid” graphics, notably to arrange multiple grid-based plots on a page, and draw tables.
  •  cowplot package: The cowplot package is a simple add-on to ggplot. It provides various features that help with creating publication-quality figures, such as a set of themes, functions to align plots and arrange them into complex compound figures, and functions that make it easy to annotate plots and or mix plots with images.

Let us first create a plot with all the legends before dividing them, so that the difference is more apparent.

Data in use:



Example:

R




library(ggplot2)
library(gridExtra)
library(cowplot)
  
gfg_data <- data.frame(x = 1:10, y = 10:1, group = LETTERS[1:10])
  
ggp_plot<- ggplot(gfg_data, aes(x,y,color = group)) + 
geom_bar(stat="identity") +scale_color_manual(values = 1:10) +
labs(color = "Legend-1")
  
ggp_plot

Output:

To divide the legends, extract a smaller sample of the data from the dataframe and apply the required functions with proper parameters to generate the desired plot.

Example:

R




# legends for two
library(ggplot2)
library(gridExtra)
library(cowplot)
  
gfg_data <- data.frame(x = 1:10, y = 10:1, group = LETTERS[1:10])
  
gfg_split_1 <- gfg_data[gfg_data$group %in% c("A", "B"), ]   
gfg_split_1
  
ggp_split_plot_1 <- ggplot(gfg_split_1, aes(x,y,color = group)) + 
geom_bar(stat="identity")+scale_color_manual(values = 1:2) +
labs(color = "Legend-1")
ggp_split_plot_1  

Output:
 



Example:

R




# legends for three
library(ggplot2)
library(gridExtra)
library(cowplot)
  
gfg_data <- data.frame(x = 1:10, y = 10:1, group = LETTERS[1:10])
  
gfg_split_2 <- gfg_data[gfg_data$group %in% c("C", "D","E"), ] 
gfg_split_2
  
ggp_split_plot_2 <- ggplot(gfg_split_2, aes(x,y,color = group)) + 
geom_bar(stat="identity")+
scale_color_manual(values = 1:3) +labs(color = "Legend-1")
  
ggp_split_plot_2  

Output:

Example:

R




# legends for rest of the data
library(ggplot2)
library(gridExtra)
library(cowplot)
  
gfg_data <- data.frame(x = 1:10, y = 10:1, group = LETTERS[1:10])
  
gfg_split_3 <- gfg_data[! gfg_data$group %in% c("A","B","C", "D","E"), ]
gfg_split_3
  
ggp_split_plot_3 <- ggplot(gfg_split_3, aes(x,y,color = group)) + 
geom_bar(stat="identity")+scale_color_manual(values = 1:5) + 
labs(color = "Legend-1")
  
ggp_split_plot_3  

Output:




My Personal Notes arrow_drop_up
Recommended Articles
Page :