Márgenes

En ocasiones, el orden por defecto de los elementos dentro de un gráfico no es el que más nos conviene. Puede que por la naturaleza de los datos, o bien por el contexto de la información que queremos presentar, nos interese añadir más espacio dentro entre el título y el panel principal, o quizás menos margen en los laterales, para centrar mejor el foco de atención. Sobre esto hablaremos en esta sección, cómo modificar los márgenes de un plot, incluidos los márgenes del título, subtítulo y pie de gráfico.

Antes de nada fijamos el tema con la función theme_set() y cargamos el gráfico base. Si no te acuerdas cómo fijar un tema puedes volver a leer la sección sobre cómo personalizar un tema en ggplot.

library(ggplot2)

theme_set(theme_elartedeldato())
msleep$vore <- as.factor(msleep$vore)
levels(msleep$vore) <- c("carnívoro", "herbívoro", "insectívoro", "omnívoro")

ggplot(msleep, aes(x = sleep_total, y = sleep_rem, color = vore)) +
  geom_point() +
  labs(
    title = "El sueño de los mamíferos",
    subtitle = "Sueño REM frente a las horas totales de sueño",
    caption = "Proceedings of the National Academy of Sciences, 104 (3):1051-1056, 2007",
    x = "Horas de sueño en total", y = "Horas de sueño en fase REM"
  ) +
  facet_wrap("vore") -> p

p

Cómo modificar los márgenes del gráfico

Principalmente, con el argumento plot.margin junto con la función margin(), podemos indicar exactamente los cm que deseamos añadir por cada uno de los lados de nuestro gráfico, empezando por el margen superior, y siguiendo el orden de las agujas del reloj (superior, derecho, inferior, izquierdo.

También es posible indicar los valores en puntos, pt, en vez de en cm.

p +
  theme(plot.margin = margin(0, 2, 0, 2, "cm")) 

Cómo añadir margen inferior a un título o subtítulo

En el caso del título, es común tratar de distanciarlo en mayor medida del resto de elementos, ya que en ggplot, por defecto, suele mostrarse muy cerca del panel principal del gráfico.

p +
  theme(
    plot.title = element_text(margin = margin(0, 0, 5, 0)),
    plot.subtitle = element_text(margin = margin(0, 0, 35, 0))
  ) 

Cómo añadir margen superior al pie de plot o caption

Para el pie del gráfico, lo normal en caso de añadir margen es hacerlo en su parte superior, por eso, seguimos los pasos que hemos aplicado anteriormente. A través del argumento margin, indicamos en número de puntos que queremos de distancia entre el panel y el caption.

p +
  theme(plot.caption = element_text(margin = margin(15, 0, 0, 0)))

En resumen…

  • theme(plot.margin = margin(...)) modifica los márgenes del plot
  • theme(plot.title=element_text(margin=margin(...)) modifica los márgenes del título
  • theme(plot.subtitle=element_text(margin=margin(...)) modifica los márgenes del subtítulo
  • theme(plot.caption=element_text(margin=margin(...)) modifica los márgenes del pie de gráfico