Leyendas en ggplot2

Datos de muestra

En este tutorial vamos a utilizar el siguiente conjunto de datos categorizados en dos grupos.

# Datos
set.seed(1)
df <- data.frame(x = c(rnorm(300, -3, 1.5),
                       rnorm(300, 0, 1)),
                 grupo = c(rep("A", 300),
                           rep("B", 300)))

Agregando una leyenda

Si quieres agregar una leyenda a un gráfico hecho con ggplot2 tendrás que pasar una variable categórica (o numérica) a color, fill, shape o alpha dentro de aes. Dependiendo de qué argumento utilizes y de tu caso particular la salida será diferente.

Color

Pasando la variable categórica a color dentro de aes los datos se dibujarán en base a los grupos y se mostrará una leyenda de manera automática.

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, color = grupo)) +
  geom_density(alpha = 0.5)

Gráfico en ggplot2 con leyenda por defecto

Ten en cuenta que este es el argumento que deberías usar si quieres crear un gráfico que no admita un color de fondo, como un gráfico de correlación. Puedes pasar una variable categórica o numérica.

# install.packages("ggplot2")
library(ggplot2)

# Datos
x <- runif(200)
y <- 3 * x ^ 2 + rnorm(length(x), sd = 2.5)
grupo <- ifelse(x < 0.5, "A", "B")
df2 <- data.frame(x = x, y = y, grupo = grupo)

ggplot(df2, aes(x = x, y = y, color = grupo)) +
  geom_point()

Gráfico de dispersión con leyenda en ggplot2

Alpha (transparencia)

# install.packages("ggplot2")
library(ggplot2)

# Datos
x <- runif(200)
y <- 3 * x ^ 2 + rnorm(length(x), sd = 2.5)
group <- ifelse(x < 0.5, "A", "B")
df2 <- data.frame(x = x, y = y)

ggplot(df2, aes(x = x, y = y, alpha = y)) +
  geom_point(colour = 4)

Gráfico de dispersión con leyenda en ggplot2 en base a la transparencia

Fill

Si el gráfico que estás creando permite agregar un color de relleno puedes usar el argumento fill dentro de aes, de modo que las cajas de la leyenda se colorearán.

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5)

Leyenda con color de relleno de las cajas en ggplot2

Color y fill a la vez

En el escenario anterior también puedes usar ambos argumentos (fill y color), de forma que la leyenda se coloreará con el color correspondiente y el borde también tendrá el color que corresponde a cada grupo.

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo, color = grupo)) +
  geom_density(alpha = 0.5)

Fill y color en una leyenda de ggplot2

Si quieres cambiar los colores de fondo o de borde del gráfico (y por tanto los de la leyenda) echaun vistazo a otros tutoriales, como el de gráficos de densidad por grupo.

Cambiar o eliminar el título de la leyenda

Existen varias formas de cambiar el título de la leyenda de un gráfico. Ten en cuenta que la opción elegida dependerá del tipo de gráfico y de tus preferencias.

Cambiar el título de la leyenda en gplot2 con la función guides

Opción 1

La primera opción es utilizar la función guides y pasar guide_legend a fill o a color, dependiendo de tu gráfico.

# install.packages("ggplot2")
library(ggplot2)

ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  guides(fill = guide_legend(title = "Título"))

Modificando el título de la leyenda en ggplot2 con la función labs

Opción 2

La segunda opción es pasar el nuevo título al argumento fill o color de la función labs.

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  labs(fill = "Título")

Personalizar el título de la leyenda en ggplot2 with a scale

Opción 3

La tercera opción es pasar el nuevo título al argumento name de la correspondiente función de la forma “scale_x_y”, como por ejemplo scale_fill_discrete o scale_color_discrete, si las estás utilizando en tu gráfico.

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  scale_fill_discrete(name = "Título")

Eliminar el título de la leyenda en ggplot2

Eliminar el título

Por último, si prefiere eliminar el título de la leyenda tan solo pasa la función element_blank al argumento legend.title de theme.

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  theme(legend.title = element_blank())

Cambiar o reordenar las etiquetas de la leyenda

Si quieres cambiar los nombres de los grupos de la leyenda puedes personalizar la columna del data frame que representa los grupos.

Otra opción es pasar las nuevas etiquetas al argumento labels de las funciones scale_color_hue o scale_fill_hue para modificar solo las etiquetas o utilizar las funciones scale_color_discrete o scale_fill_discrete si solo quieres cambiar los colores.

Nuevas etiquetas de los grupos de la leyenda

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  scale_fill_hue(labels = c("G1", "G2"))

Personalizar las etiquetas de la leyenda en ggplot2

Reordenar las etiquetas

En caso de necesitar reordenar las etiquetas de la leyenda tendrás que ordenar la variable de tipo factor. En este ejemplo hemos creado una nueva variable con el nuevo orden.

# install.packages("ggplot2")
library(ggplot2)

# Crea una nueva variable con otros niveles
df$grupo2 <- factor(df$grupo,
                    levels = c("B", "A"))
                 
ggplot(df, aes(x = x, fill = grupo2)) +
  geom_density(alpha = 0.5)

Reordenar las etiquetas de una leyenda de ggplot2

Cambiar la posición de la leyenda

Por defecto, la leyenda se generará automáticamente a la derecha del gráfico de ggplot2. Sin embargo, haciendo uso del argumento legend.position de la función theme puedes modificar su posición. Los posibles valores son "right" (por defecto), "top", "left", "bottom" y "none".

Leyenda encima del gráfico en ggplot2

Arriba (“top”)

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  theme(legend.position = "top")

Leyenda a la izquierda del gráfico en ggplot2

Izquierda (“left”)

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  theme(legend.position = "left")

Leyenda debajo del gráfico en ggplot2

Debajo (“bottom”)

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  theme(legend.position = "bottom")

Leyenda dentro del gráfico en ggplot2

Posición personalizada

Ten en cuenta que incluso puedes establecer una posición personalizada para la leyenda de ggplot2 y ponerla dentro del gráfico. Tendrás que establecer las posiciones entre 0 y 1 relativas a los ejes con el argumento legend.position de la función theme. Además, puedes cambiar el color de fondo de la leyenda con legend.background en caso de ser necesario.

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  theme(legend.position = c(0.2, 0.8),
        legend.background = element_rect(fill = "white"))

Echa un vistazo también a legend.justification, legend.direction y legend.box.just para una personalización más avanzada.

Personalización de la leyenda

Existen numerosos argumentos que permiten personalizar las leyendas en ggplot2. Tendrás que usar los argumentos de la función theme que comienzan con legend., como legend.title, legend.background, legend.margin, …

Personalizar el título

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  theme(legend.title = element_text(family = "Roboto",
                                    color = "blue", 
                                    size = 10,
                                    face = 2))

Color y fuente del título de la leyenda en ggplot2

Personalizar el color de fondo y de borde de la leyenda

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  theme(legend.background = element_rect(fill = "lightblue", # Fondo
                                         colour = 1))        # Borde

Color de fondo y del borde de una leyenda de ggplot2

Personalizar los keys de la leyenda

En este ejemplo vamos a incrementar el tamaño de las cajas, pero si tienes por ejemplo un gráfico de dispersión, puedes cambiar el tamaño de los símbolos con guides(color = guide_legend(override.aes = list(size = 4))), siendo 4 el nuevo tamaño.

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  theme(legend.key.size = unit(1, units = "cm"))

Tamaño de las keys de la leyenda en ggplot2

Eliminar la leyenda

Por útlimo, en caso de que quieras deshacerte de la leyenda por defecto puedes establecer su posición como "none", tal y como se muestra en el ejemplo siguiente:

Eliminar la leyenda en ggplot2

Eliminar la leyenda

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo)) +
  geom_density(alpha = 0.5) +
  theme(legend.position = "none")

Además, en caso de que tu gráfico tenga varias leyendas o que hayas mapeado una variable a varios argumentos puedes deshacerte de parte de la leyenda estableciendo ese argumento como FALSE dentro de guides. En el ejemplo siguiente estamos eliminando la leyenda correspondiente a fill del gráfico, mantiendo solo la leyenda que corresponde a color.

Eliminar parte de la leyenda de ggplot2

Eliminar una parte de la leyenda

# install.packages("ggplot2")
library(ggplot2)
                 
ggplot(df, aes(x = x, fill = grupo, color = grupo)) +
  geom_density(alpha = 0.5) +
  guides(fill = FALSE)
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
ggplot2

Elegant Graphics for Data Analysis

Comprar en Amazon
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon

También te puede interesar