Cuando quieres crear un gráfico de barras o bar plot en ggplot2 puedes tener dos tipos diferentes de datos: cuando una variable representa categorías y la otra el recuento de cada una de esas categorías o cuando tienes todas las ocurrencias de una variable categórica, de modo que quieres contar cuántas ocurrencias existen para cada grupo. En este tutorial mostraremos cómo trabajar con ambos tipos de datos.
Datos con categorías y ocurrencias por categoría (n)
df <- data.frame(grupo = c("A", "B", "C"),
n = c(3, 5, 6))
Solo datos categóricos
df2 <- data.frame(cat = c("A", "A", "A",
"B", "B", "B", "B", "B",
"C", "C", "C", "C", "C", "C"))
geom_bar
geom_bar
La función principal para crear gráficos de barras en ggplot2 es geom_bar
. Por defecto, esta función cuenta el número de ocurrencias para cada categoría de la variable.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df2, aes(x = cat)) +
geom_bar()
geom_bar con stat “identity”
Sin embargo, si tu conjunto de datos ya contiene el recuento para cada grupo, como ocurre en el conjunto de datos de muestra llamado df
, tendrás que pasar stat = "identity"
dentro de geom_bar
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n)) +
geom_bar(stat = "identity")
geom_col
geom_col
geom_col
es lo mismo que geom_bar(stat = "identity")
, por lo que si tus datos contienen los grupos y el recuento para cada uno de ellos puedes utilizar tan solo esta función.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n)) +
geom_col()
Existen dos formas principales para crear bar plots horizontales: usando la función coord_flip
para invertir los ejes o pasando la variable categórica al argumento y
de aes
.
Opción 1: usar coord_flip
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n)) +
geom_bar(stat = "identity") +
coord_flip()
Opción 2: cambiar el orden de las variables dentro de aes
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = n, y = grupo)) +
geom_bar(stat = "identity")
El orden por defecto de las barras depende de los niveles de la variable categórica que se transforma internamente en factor. En nuestro ejemplo puedes comprobar que el orden de las barras corresponde con levels(as.factor(df$grupo))
. Sin embargo, puedes reordenar las barras a tu gusto de diferentes formas: cambiando los límites con scale_x_discrete
, modificando el orden de los niveles con factor
o incluso utilizando la función reorder
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n)) +
geom_bar(stat = "identity") +
scale_x_discrete(limits = c("C", "B", "A"))
# O cambiando los niveles de la variable de tipo factor
ggplot(df, aes(x = factor(grupo, levels = c("C", "B", "A")), y = n)) +
geom_bar(stat = "identity")
En algunos escenarios resulta de interés agregar etiquetas para mostrar el número que representa cada barra o un texto describiendo las barras. Para ello puedes utilizar la función geom_text
(o geom_label
) y establecer las etiquetas dentro del argumento label
de aes
, así como cambiar su ajuste vertical con vjust
.
Etiquetas dentro de las barras
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n)) +
geom_bar(stat = "identity") +
geom_text(aes(label = n), vjust = 2, colour = "white")
# Ten en cuenta que si tus datos son categóricos
# puedes mostrar la cuenta con ..count..
ggplot(df2, aes(x = cat)) +
geom_bar() +
geom_text(aes(label = ..count..), stat = "count", vjust = 2, colour = "white")
Etiquetas sobre las barras
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n)) +
geom_bar(stat = "identity") +
geom_text(aes(label = n), vjust = -1, colour = "black") +
ylim(c(0, 6.5)) # Incrementa los límites del eje Y si es necesario
Es posible cambiar el color de relleno y de borde de las barras. Puedes establecer un color para todas las barras, un color para cada grupo o elegir los colores que quieras.
Un único color para todas las barras
Por defecto, todas las barras del gráfico son grises. Puedes cambiar este color pasando un nuevo color al argumento fill
de geom_bar
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n)) +
geom_bar(stat = "identity", fill = 4)
Color por grupo
Ten en cuenta que también puedes establecer un color para cada grupo de tus datos. En este escenario, tendrás que pasar tu variable categórica a fill
dentro de la función aes
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n, fill = grupo)) +
geom_bar(stat = "identity")
Especificar un color para cada barra
Cuando se colorean las barras por grupo los colores serán los de la paleta por defecto de ggplot2. Para sobrescribir los colores puedes utilizar otra paleta de colores o seleccionar los colores que quieras con la función scale_fill_manual
, tanto con un vector ordenado de colores como con un vector con nombres, donde los nombres son las diferentes categorías.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n, fill = grupo)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("#FCFED4", "#CCEDB1", "#41B7C4"))
# O usa un vector con nombres donde los nombres son las categorías
ggplot(df, aes(x = grupo, y = n, fill = grupo)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("A" = "#FCFED4", "B" = "#CCEDB1", "C" = "#41B7C4"))
Color del borde
Si utilizas el argumento color
en lugar de fill
puedes cambiar el color del borde de las barras de la misma manera que hicieste con el color de fondo, además de poder especificar el grosor y tipo de línea con lwd
y linetype
, respectivamente.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n)) +
geom_bar(stat = "identity",
color = "lightblue",
lwd = 2, fill = "white")
Color del borde por grupo
En caso de que quieras cambiar el color por grupo pasa la variable categórica al argumento color
dentro de aes
. Ten en cuenta que si quieres personalizar los colores puedes utilizar la función scale_color_manual
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n, color = grupo)) +
geom_bar(stat = "identity", lwd = 2, fill = "white")
Posición de la leyenda
La leyenda se dibuja por defecto a la derecha, pero puedes cambiarla de lugar con el argumento legend.position
de la función theme
. Las posibles opciones son "right"
(por defecto), "bottom"
, "left"
, "top"
y "none"
, para eliminar la leyenda del bar plot.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n, fill = grupo)) +
geom_bar(stat = "identity") +
theme(legend.position = "bottom")
Título de la leyenda
El título por defecto de la leyenda es el nombre de la variable categórica. Para sobrescribir este nombre puedes utilizar la siguiente línea de código.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n, fill = grupo)) +
geom_bar(stat = "identity") +
guides(fill = guide_legend(title = "Título leyenda"))
Etiquetas de la leyenda
Por último, si quieres personalizar los nombres que aparecen en las etiquetas de la leyenda puedes cambiar las categorías de la variable categórica o utilizar el argumento labels
de scale_fill_hue
como sigue.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = grupo, y = n, fill = grupo)) +
geom_bar(stat = "identity") +
scale_fill_hue(labels = c("Grupo A", "Grupo B", "Grupo C"))
También te puede interesar