Gráfico de barras en ggplot2 con geom_bar y geom_col

Conjuntos de datos de muestra

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"))

Gráfico de barras con 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()

Gráfico de barras en ggplot2 con 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")

Gráfico de barras con geom_bar y stat identity en ggplot2

Bar chart con geom_col

La función geom_col en R

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()

Bar plot horizontal

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()

Invertir los ejes de un gráfico de barras en ggplot2

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")

Gráfico de barras horizontal en ggplot2

Orden de las barras

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.

Orden de las barras en ggplot2

# 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")

Agregar etiquetas a las barras

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")

Agregar etiquetas a las barras de un gráfico de barras en R

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

Agregar texto sobre las barras de un gráfico de barras en ggplot2

Personalización del color de las barras

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.

Cambiar el color de las barras de un bar plot en ggplot2

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 de fondo de las barras de un gráfico de barras en ggplot2

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 colores personalizados de las barras en ggplot

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"))

Cambiar el color de los bordes de las barras de un gráfico de barras hecho con ggplot2 y geom_bar

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 de un gráfico de barras en R

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")

Personalización de la leyenda

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")

Cambiar la posición de la leyenda de un gráfico de barras en R

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"))

Cambiar el título de la leyenda de un gráfico de barras en ggplot2

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"))

Cambiar las etiquetas de la leyenda de un gráfico de barras en

También te puede interesar