2019-01-09

Usar bucles en ggplot2

Problema

Queremos crear y guardar gráficos separadamente con ggplot2. Es decir, en lugar de mostrar los gráficos en un mismo panel con facet_wrap o facet_grid, queremos crear gráficos independientes, cada uno en un panel y almacenarlos en una lista.

library(tidyverse)
p <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point()
p + facet_wrap(vars(Species), scales = "free")

Solución

Creamos una lista vacía donde almacenaremos los gráficos. Iniciamos un bucle generando uno gráfico con ggplot2 para cada elemento único de la lista de especies. Dejamos la función facet_wrap, aunque cada gráfico está en un único panel, para obtener el título de cada especie.

# Bucle
plots <- list() # Creamos una lista vacía
p_list <- unique(iris$Species)
for (i in seq_along(p_list)) {
  # Gráfico por especie
  p <- iris %>% filter(Species == p_list[i]) %>%
    ggplot(aes(Sepal.Length, Sepal.Width)) +
    geom_point() +
    facet_wrap( ~ Species) # Títulos
  plots[[i]] = p
  print(p)
}
Para volver a imprimir la lista completa de gráficos o uno específico.

# Imprime lista completa
print(plots)
# Imprime uno específico
print(plots[[1]])

Entradas relacionadas

Referencias

No hay comentarios:

Publicar un comentario

Nube de datos