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)))
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)
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()
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)
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)
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)
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.
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.
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"))
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")
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
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())
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"))
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)
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"
.
Arriba (“top”)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, fill = grupo)) +
geom_density(alpha = 0.5) +
theme(legend.position = "top")
Izquierda (“left”)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, fill = grupo)) +
geom_density(alpha = 0.5) +
theme(legend.position = "left")
Debajo (“bottom”)
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, fill = grupo)) +
geom_density(alpha = 0.5) +
theme(legend.position = "bottom")
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.
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))
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
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"))
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
# 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 "none"
dentro de guides
. En el ejemplo siguiente estamos eliminando la leyenda correspondiente a fill
del gráfico, manteniendo solo la leyenda que corresponde a color
.
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 = "none")
También te puede interesar