r ggplot2 gridextra cowplot tidyeval

Parcelas mĂșltiples en para bucle ignorando par



ggplot2 gridextra (1)

Estoy tratando de generar 10 pares de gráficos con unos pocos pares por página de gráficos, y estoy usando un bucle for para construir los pares. Sin embargo, los gráficos se envían al dispositivo como gráficos independientes en lugar de páginas.

El MWE a continuación tiene construcciones idénticas para los gráficos base y ggplot versiones ggplot , pero el gráfico base funciona y el ggplot no. ¿Qué debo hacer para que la paginación sea correcta en la segunda versión?

library(ggplot2) attach(mtcars) # correct configuration par(mfrow=c(2,2)) for (ii in 1:3){ vars <- c("wt", "disp", "wt") plot(get(vars[ii]), mpg) hist(get(vars[ii])) } # places each on separate plot par(mfrow=c(2,2)) for (ii in 1:3){ vars <- c("wt", "disp", "wt") p <- ggplot(mtcars, aes(get(vars[ii]), mpg)) + geom_point(size=4) plot(p) p <- ggplot(mtcars, aes(get(vars[ii]))) + geom_histogram() plot(p) } detach(mtcars)


Aquí hay una forma de hacerlo con cowplot::plot_grid . La función plot_duo utiliza el enfoque ggplot2 v3.0.0 en ggplot2 v3.0.0

# install.packages("ggplot2", dependencies = TRUE) library(rlang) library(dplyr) library(ggplot2) library(cowplot) plot_duo <- function(df, plot_var_x, plot_var_y) { if (is.character(plot_var_x)) { print(''character column names supplied, use ensym()'') plot_var_x <- ensym(plot_var_x) } else { print(''bare column names supplied, use enquo()'') plot_var_x <- enquo(plot_var_x) } if (is.character(plot_var_y)) { plot_var_y <- ensym(plot_var_y) } else { plot_var_y <- enquo(plot_var_y) } pts_plt <- ggplot(df, aes(x = !! plot_var_x, y = !! plot_var_y)) + geom_point(size = 4) his_plt <- ggplot(df, aes(x = !! plot_var_x)) + geom_histogram() duo_plot <- plot_grid(pts_plt, his_plt, ncol = 2) } ### use character column names plot_vars1 <- c("wt", "disp", "wt") plt1 <- plot_vars1 %>% purrr::map(., ~ plot_duo(mtcars, .x, "mpg")) #> [1] "character column names supplied, use ensym()" #> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. #> [1] "character column names supplied, use ensym()" #> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. #> [1] "character column names supplied, use ensym()" #> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. plot_grid(plotlist = plt1, nrow = 3)

### use bare column names plot_vars2 <- alist(wt, disp, wt) plt2 <- plot_vars2 %>% purrr::map(., ~ plot_duo(mtcars, .x, "mpg")) #> [1] "bare column names supplied, use enquo()" #> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. #> [1] "bare column names supplied, use enquo()" #> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. #> [1] "bare column names supplied, use enquo()" #> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. plot_grid(plotlist = plt2, nrow = 3)

Para gridExtra::marrangeGrob gráficos en varias páginas, podemos usar gridExtra::marrangeGrob

ml1 <- marrangeGrob(plt, nrow = 2, ncol = 1) # Interactive use ml1

# Non-interactive use, multipage pdf ggsave("multipage.pdf", ml1)