En este artículo, discutiremos cómo crear un gráfico combinado con una leyenda compartida en R Language usando el paquete ggplot2.
Para unir varias parcelas ggplot2, usamos la función grid.arrange() del paquete gridExtra en el lenguaje R. La función grid.arrange() convierte el marco en una cuadrícula del número deseado de filas y columnas. Luego colocamos diferentes parcelas en diferentes partes de la cuadrícula para crear el aspecto deseado para varias parcelas en el mismo marco.
Sintaxis:
grid.arrange( plot1, plot2,……, ncol/nrow)
dónde,
- ncol: determina el número de columnas en la cuadrícula.
- nrow: determina el número de filas en la cuadrícula.
Ejemplo:
Aquí hay un diagrama combinado hecho usando la función grid.arrange() del paquete ggplot2.
R
# 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)
Producción:
Trama combinada con leyenda compartida
Para crear una trama combinada con leyenda compartida seguimos los siguientes pasos:
Paso 1: Cree una trama combinada usando la función grid.arrange() sin ninguna leyenda.
R
# To remove legend plot+ theme( legend.position = "none" ) # arrange side by side in a grid grid.arrange( plot1 , plot2 , ncol=2)
Paso 2: Cree una función que extraiga la leyenda del gráfico ggplot2 y la devuelva como un elemento ggplot.
R
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_table$grobs, function(x) x$name) == "guide-box") # extract legend legend <- plot_table$grobs[[legend_plot]] # return legend return(legend) }
Paso 3: Combine la leyenda obtenida de la función anterior usando la función grid.arrange().
R
grid.arrange(combined_plot, legend, nrow = 2, heights = c(10, 1))
Y la trama resultante será una trama combinada con una leyenda compartida.
Ejemplo:
Aquí, hay una trama combinada hecha usando la función grid.arrange() con leyenda compartida.
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 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_table$grobs, function(x) x$name) == "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))
Producción:
Publicación traducida automáticamente
Artículo escrito por mishrapriyank17 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA