varias superponer simultaneos modificar lineas graficos graficas graficar ggplot ejes como barras r layout ggplot2 par

simultaneos - superponer graficas en r ggplot



Gráfico combinado de ggplot2(No en un solo gráfico), usando la función par() o layout() (3)

Esta pregunta ya tiene una respuesta aquí:

He estado pensando en usar las funciones par () o layout () para combinar ggplots. ¿Será posible usar esas funciones?

Digamos que quiero trazar ggplot para scatterplot y ggplot para histogram. Y quiero combinar las dos parcelas (NO EN UNA SOLA PARCELA). ¿Es aplicable?

Lo intenté con un trazado simple en R, sin usar las funciones ggplot. Y funciona en realidad.

Aquí hay una muestra de Quick-R, Enlace: http://www.statmethods.net/advgraphs/layout.html

# 4 figures arranged in 2 rows and 2 columns attach(mtcars) par(mfrow=c(2,2)) plot(wt,mpg, main="Scatterplot of wt vs. mpg") plot(wt,disp, main="Scatterplot of wt vs disp") hist(wt, main="Histogram of wt") boxplot(wt, main="Boxplot of wt") # One figure in row 1 and two figures in row 2 attach(mtcars) layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE)) hist(wt) hist(mpg) hist(disp)

Pero cuando intento usar ggplot y combinar la trama, no obtengo una salida.


La respuesta que involucra a grid.layout funciona, la he usado y la grid.layout a la grid.layout . Sin embargo, generalmente encuentro que esta solución es demasiado tediosa y propensa a errores, y sospecho que la mayoría de los entusiastas de ggplot2 que hacen esto regularmente lo han envuelto en una función. He encontrado varias funciones de ajuste de este tipo en búsquedas anteriores, pero mi solución de caballo de batalla actual está en un paquete de complemento de cuadrícula llamado gridExtra . Tiene argumentos útiles, pero la configuración predeterminada de filas / columnas es a menudo lo que quería en primer lugar:

library("ggplot2") # Generate list of arbitrary ggplots plot1 <- qplot(data = mtcars, x=wt, y=mpg, geom="point",main="Scatterplot of wt vs. mpg") plot2 <- qplot(data = mtcars, x=wt, y=disp, geom="point",main="Scatterplot of wt vs disp") plot3 <- qplot(wt,data=mtcars) plot4 <- qplot(wt,mpg,data=mtcars,geom="boxplot") plot5 <- qplot(wt,data=mtcars) plot6 <- qplot(mpg,data=mtcars) plot7 <- qplot(disp,data=mtcars) # You might have produced myPlotList using instead lapply, mc.lapply, plyr::dlply, etc myPlotList = list(plot1, plot2, plot3, plot4, plot5, plot6, plot7) library("gridExtra") do.call(grid.arrange, myPlotList)

Observe cómo el código "combinar mis gráficos en un gráfico" real era una línea (después de cargar gridExtra). Podría argumentar que poner las tramas en una lista era una línea adicional, pero en realidad podría haber usado alternativamente

grid.arrange(plot1, plot2, plot3, plot4, plot5, plot6, plot7)

Para pequeñas cantidades de ggplots esto podría ser preferible. Sin embargo, para n_plots > 4 comenzará a molestarse en tener que nombrarlos y escribirlos todos.


Una utilidad que creo que merece más atención es el layOut anterior wq paquete wq (nótese la "O" mayúscula). Desde entonces se eliminó del paquete wq , así que coloqué el código a continuación y lo lay_out para que coincida con el estilo típico de ggplot. Es como el base::layout porque las parcelas pueden ser de diferentes tamaños, dispuestas en filas y columnas. Cada argumento para lay_out es una lista de 3 elementos que consta de la gráfica, los índices de fila en los que se debe trazar y los índices de columna en los que se debe trazar.

Por ejemplo, usando las tramas de @Paul McMurdie,

lay_out(list(plot1, 1, 1), list(plot2, 1, 2), list(plot3, 2, 1), list(plot4, 2, 2), list(plot5, 3, 1:2), list(plot6, 4, 1:2), list(plot7, 1:2, 3))

lay_out = function(...) { x <- list(...) n <- max(sapply(x, function(x) max(x[[2]]))) p <- max(sapply(x, function(x) max(x[[3]]))) grid::pushViewport(grid::viewport(layout = grid::grid.layout(n, p))) for (i in seq_len(length(x))) { print(x[[i]][[1]], vp = grid::viewport(layout.pos.row = x[[i]][[2]], layout.pos.col = x[[i]][[3]])) } }

(Código procedente de una versión anterior del paquete wq , del historial de confirmaciones en el espejo no oficial Github CRAN ).


library(ggplot2) library(grid) vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) plot1 <- qplot(mtcars,x=wt,y=mpg,geom="point",main="Scatterplot of wt vs. mpg") plot2 <- qplot(mtcars,x=wt,y=disp,geom="point",main="Scatterplot of wt vs disp") plot3 <- qplot(wt,data=mtcars) plot4 <- qplot(wt,mpg,data=mtcars,geom="boxplot") plot5 <- qplot(wt,data=mtcars) plot6 <- qplot(mpg,data=mtcars) plot7 <- qplot(disp,data=mtcars) # 4 figures arranged in 2 rows and 2 columns grid.newpage() pushViewport(viewport(layout = grid.layout(2, 2))) print(plot1, vp = vplayout(1, 1)) print(plot2, vp = vplayout(1, 2)) print(plot3, vp = vplayout(2, 1)) print(plot4, vp = vplayout(2, 2)) # One figure in row 1 and two figures in row 2 grid.newpage() pushViewport(viewport(layout = grid.layout(2, 2))) print(plot5, vp = vplayout(1, 1:2)) print(plot6, vp = vplayout(2, 1)) print(plot7, vp = vplayout(2, 2))