En este tutorial vamos a usar el siguiente data frame, que contiene una variable numérica y otra categórica representando grupos.
# Conjunto de datos de muestra
set.seed(1)
df <- data.frame(x = LETTERS[1:10],
y = sample(20:35, 10, replace = TRUE))
Gráfico lollipop básico
Dadao un data frame con una variable numérica y otra categórica es posible crear un gráfico de piruleta (lollipop chart) en ggplot2 combinando geom_segment
y geom_point
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, y = y)) +
geom_segment(aes(x = x, xend = x, y = 0, yend = y)) +
geom_point()
Lollipop chart horizontal
Ten en cuenta que en varios escenarios, especialmente si las etiquetas de las categorías son largas es recomendable crear un gráfico horizontal. Para ello piedes usar coord_flip
o invertir el orden de las variables dentro de aes
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, y = y)) +
geom_segment(aes(x = x, xend = x, y = 0, yend = y)) +
geom_point() +
coord_flip()
Puntos
Los puntos se pueden personalizar pasando argumentos a la función geom_point
. En el siguiente ejemplo vamos a cambiar el tamaño, el símbolo, el color de fondo y el borde del símbolo.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, y = y)) +
geom_segment(aes(x = x, xend = x, y = 0, yend = y)) +
geom_point(size = 4, pch = 21, bg = 4, col = 1) +
coord_flip()
Segmentos
De manera similar a personalizar los puntos también puedes personalizar los segmentos. En el siguiente ejemplo estamos cambiando su color a gris e incrementando el ancho.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, y = y)) +
geom_segment(aes(x = x, xend = x, y = 0, yend = y),
color = "gray", lwd = 1.5) +
geom_point(size = 4, pch = 21, bg = 4, col = 1) +
coord_flip()
Etiquetas
Como el eje X es discreto es posible cambiar las etiquetas de las categorías con el argumento labels
de scale_x_discrete
.
# install.packages("ggplot2")
ggplot(df, aes(x = x, y = y)) +
geom_segment(aes(x = x, xend = x, y = 0, yend = y),
color = "gray", lwd = 1) +
geom_point(size = 4, pch = 21, bg = 4, col = 1) +
scale_x_discrete(labels = paste0("G_", 1:10)) +
coord_flip()
Rotar las etiquetas
Si las etiquetas son demasiado largas no entrarán. Sin embargo, puedes rotar las etiquetas con el argumento angle
de la función element_text
en el componente axis.text.x
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, y = y)) +
geom_segment(aes(x = x, xend = x, y = 0, yend = y),
color = "gray", lwd = 1) +
geom_point(size = 4, pch = 21, bg = 4, col = 1) +
scale_x_discrete(labels = paste("Grupo", 1:10)) +
theme(axis.text.x = element_text(angle = 90,
vjust = 0.5, hjust = 1))
Tema
Como en otros gráficos hechos con ggplot es posible cambiar el tema del gráfico.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, y = y)) +
geom_segment(aes(x = x, xend = x, y = 0, yend = y),
color = "gray", lwd = 1) +
geom_point(size = 4, pch = 21, bg = 4, col = 1) +
scale_x_discrete(labels = paste0("G_", 1:10)) +
coord_flip() +
theme_minimal()
Texto
Ten en cuenta que también puedes añadir los valores correspondientes u otro texto dentro de los puntos usando geom_text
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = x, y = y)) +
geom_segment(aes(x = x, xend = x, y = 0, yend = y),
color = "gray", lwd = 1) +
geom_point(size = 7.5, pch = 21, bg = 4, col = 1) +
geom_text(aes(label = y), color = "white", size = 3) +
scale_x_discrete(labels = paste0("G_", 1:10)) +
coord_flip() +
theme_minimal()
Por último, también puedes reordenar el gráfico en base a una variable haciendo uso de la función reorder
u otra equivalente.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = reorder(x, -y), y = y)) +
geom_segment(aes(x = reorder(x, -y),
xend = reorder(x, -y),
y = 0, yend = y),
color = "gray", lwd = 1) +
geom_point(size = 4, pch = 21, bg = 4, col = 1) +
xlab("Grupo") +
ylab("") +
coord_flip() +
theme_minimal()
También te puede interesar