R语言 为合并的ggplot2图添加共同图例

R语言 为合并的ggplot2图添加共同图例

在这篇文章中,我们将讨论如何在R语言中使用ggplot2包创建一个带有共享图例的组合图。

为了连接多个ggplot2图,我们使用R语言中gridExtra包的 grid.arrange() 函数。grid.arrange()函数将框架转换为所需行数和列数的网格。然后,我们把不同的图放在网格的不同部分,为同一框架中的多个图创造所需的外观。

语法

grid.arrange( plot1, plot2,……, ncol/nrow)

其中。

  1. ncol: 决定了网格中的列数。
  2. nrow: 决定了网格中的行数。

例子

这里,是一个使用ggplot2包的grid.arrange()函数制作的组合图。

# Load ggplot2 and gridExtra
library("ggplot2") 
library("gridExtra")
  
# Create sample data
set.seed(5642)                             
sample_data <- data.frame(
  name = c("Geek1","Geek2","Geek3",
           "Geek4","Geeek5") ,
  value=c(31,12,15,28,45))
  
  
# Create both plot and store in variable
plot1<-ggplot(sample_data,
              aes(x = name, y = value, col=name)) +
              geom_point(size=4)
plot2<-ggplot(sample_data,
              aes(x = name, y = value, fill=name)) +
              geom_col()
  
# combine both plots using grid.arrange()
grid.arrange(plot1, plot2, ncol = 2)

输出

在R语言中为合并的ggplot2图添加共同图例

带有共享图例的组合

为了创建一个具有共享图例的组合图,我们遵循以下步骤。

第1步: 使用grid.arrange()函数创建一个没有任何图例的组合图。

# To remove legend
plot+ theme( legend.position = "none" ) 
  
# arrange side by side in a grid
grid.arrange( plot1 , plot2 , ncol=2)

第2步: 创建一个函数,从ggplot2图中提取图例并作为ggplot元素返回。

get_only_legend <- function(plot) {
    
# get tabular interpretation of plot
plot_table <- ggplot_gtable(ggplot_build(plot)) 
    
#  Mark only legend in plot
legend_plot <- which(sapply(plot_tablegrobs, function(x) xname) == "guide-box") 
                              
# extract legend
legend <- plot_table$grobs[[legend_plot]]
                              
# return legend
return(legend) 
}

第3步: 用grid.arrange()函数将上述函数得到的图例结合起来。

grid.arrange(combined_plot, legend, nrow = 2, heights = c(10, 1))

而产生的图将是一个带有共享图例的组合图。

例子

这里,是一个使用grid.arrange()函数绘制的带有共享图例的组合图。

# 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 gridExtra
library("ggplot2") 
library("gridExtra")
  
# Create both plot and store in variable without legend
plot1<-ggplot(sample_data,
              aes(x = name, y = value, col=name)) +
              geom_point(size=4)+
              theme(legend.position = "none")
plot2<-ggplot(sample_data,
              aes(x = name, y = value, fill=name)) +
              geom_col()+
              theme(legend.position = "none")
  
# combine both plots using grid.arrange()
combined_plot <- grid.arrange(plot1, plot2, ncol = 2)
  
# plot1 with legend
plot1_legend <- ggplot(sample_data,
              aes(x = name, y = value, col=name)) +
              geom_point(size=4)+
              theme(legend.position = "bottom")
  
# function to extract legend from plot
get_only_legend <- function(plot) {
  plot_table <- ggplot_gtable(ggplot_build(plot))
  legend_plot <- which(sapply(plot_tablegrobs, function(x) xname) == "guide-box")
  legend <- plot_table$grobs[[legend_plot]]
  return(legend)
}
                            
# extract legend from plot1 using above function
legend <- get_only_legend(plot1_legend)   
     
# final combined plot with shared legend
grid.arrange(combined_plot, legend, nrow = 2, heights = c(10, 1))

输出

在R语言中为合并的ggplot2图添加共同图例

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程