Datos de muestra

La función barplot necesita una matriz o una tabla para crear un gráfico de barras agrupadas, donde cada columna representa un grupo (las barras a lo largo del eje X) y cada fila representa un subgrupo (las barras dentro de cada grupo). En el siguiente ejemplo creamos una matriz con cuatro grupos y dos subgrupos.

m <- matrix(c(12, 8, 7, 11, 9, 6, 4, 10), nrow = 2,
            dimnames = list(c("G1", "G2"),
                            c("A", "B", "C", "D")))
m
A B C D
G1 12 7 9 4
G2 8 11 6 10

Gráfico de barras agrupadas con beside = TRUE

Por defecto, si pasas una matriz a barplot la función creará un gráfico de barras apiladas. Para crear un gráfico de barras agrupadas, también conocido como gráfico de barras lado a lado o gráfico de columnas agrupadas, tendrás que establecer beside = TRUE. Si prefieres ggplot2 consulta el gráfico de barras agrupadas en ggplot2.

barplot(m,
        beside = TRUE)

Gráfico de barras agrupadas en R con barplot y beside TRUE

Gráfico de barras agrupadas a partir de un data frame

Si tus datos están en un data frame con una columna para los grupos, otra para los subgrupos y otra para los valores tendrás que transformarlo en una matriz primero. La forma más sencilla es utilizar la función xtabs, pasando una fórmula de la forma valor ~ subgrupo + grupo.

df <- data.frame(x = rep(c("A", "B", "C", "D"), each = 2),
                 grupo = rep(c("G1", "G2"), times = 4),
                 y = c(12, 8, 7, 11, 9, 6, 4, 10))

tabla <- xtabs(y ~ grupo + x, data = df)

barplot(tabla, beside = TRUE)

Ten en cuenta que si solo tienes las variables categóricas puedes contar las ocurrencias de cada combinación con table, como en table(df$grupo, df$x).

Gráfico de barras agrupadas en R a partir de un data frame con xtabs

Espacio entre las barras

El argumento space controla el espacio entre las barras. Cuando beside = TRUE puedes pasar un vector de dos valores, donde el primer valor es el espacio entre las barras de un mismo grupo y el segundo el espacio entre grupos, como fracción del ancho de las barras. El valor por defecto es c(0, 1).

barplot(m, beside = TRUE,
        space = c(0.2, 1.5))

Espacio entre las barras de un gráfico de barras agrupadas en R

Gráfico de barras agrupadas horizontal

Gráfico de barras agrupadas horizontal en R

Si prefieres un gráfico de barras agrupadas horizontal en lugar de vertical establece horiz = TRUE. Ten en cuenta que el primer subgrupo se colocará en la parte inferior de cada grupo.

barplot(m, beside = TRUE,
        horiz = TRUE)

Color de relleno y bordes

Por defecto las barras se colorean en tonos de gris. El argumento col permite establecer un color para cada subgrupo, por lo que tendrás que especificar tantos colores como filas tenga tu matriz. Consulta las paletas de colores para elegir tus colores. Además, puedes cambiar el color de los bordes con border o eliminarlos estableciendo border = NA.

barplot(m, beside = TRUE,
        col = c("#2A9D8F", "#E76F51"),
        border = "white")

Cambiar los colores de un gráfico de barras agrupadas en R

Añadir una leyenda

La función barplot proporciona un argumento llamado legend.text. Si lo estableces como TRUE se añadirá una leyenda con los nombres de las filas de la matriz, pero también puedes pasar un vector con los nombres que quieras. Además, puedes pasar los argumentos de la función legend a args.legend como una lista para personalizarla.

barplot(m, beside = TRUE, ylim = c(0, 15),
        col = c("#2A9D8F", "#E76F51"),
        legend.text = TRUE,
        args.legend = list(x = "topleft", bty = "n"))

Añadir una leyenda a un gráfico de barras agrupadas en R

Gráfico de barras agrupadas en R con la leyenda fuera del gráfico

Leyenda fuera del gráfico

Ten en cuenta que dependiendo de tus datos la leyenda puede tapar las barras, por lo que puede que tengas que incrementar los límites del eje Y, como en el ejemplo anterior. Si quieres poner la leyenda fuera del gráfico incrementa el margen correspondiente, establece xpd = TRUE y ajusta la posición de la leyenda con inset.

par(mar = c(5, 4, 4, 6))
barplot(m, beside = TRUE,
        col = c("#2A9D8F", "#E76F51"),
        legend.text = TRUE,
        args.legend = list(x = "right", inset = c(-0.25, 0),
                           xpd = TRUE, bty = "n"))

Añadir etiquetas a las barras

La función barplot devuelve la posición del centro de cada barra, de modo que puedes guardar la salida en un objeto y utilizarla para añadir textos sobre las barras con la función text. Ten en cuenta que puede que tengas que incrementar los límites del eje Y con ylim para que las etiquetas quepan dentro del gráfico.

bp <- barplot(m, beside = TRUE,
              ylim = c(0, 14))

text(bp, m + 0.6, labels = m)

Añadir etiquetas sobre las barras de un gráfico de barras agrupadas en R

Gráfico de barras agrupadas con barras de error

R base no proporciona una función para añadir barras de error, pero puedes dibujarlas con la función arrows, estableciendo angle = 90 y code = 3 para que las puntas de las flechas se conviertan en las líneas horizontales de las barras de error. Al igual que con las etiquetas, necesitarás las posiciones que devuelve barplot. En este ejemplo utilizamos una matriz llamada se con el error estándar de cada valor.

se <- matrix(c(1.1, 0.9, 0.8, 1.3, 1, 0.7, 0.6, 1.2), nrow = 2)

bp <- barplot(m, beside = TRUE,
              ylim = c(0, 15))

arrows(x0 = bp, y0 = m - se, y1 = m + se,
       angle = 90, code = 3, length = 0.05)

Gráfico de barras agrupadas con barras de error en R

Orden de las barras

Los grupos y las barras dentro de cada grupo se muestran en el mismo orden que las columnas y las filas de la matriz, respectivamente. Para cambiar el orden tan solo tienes que reordenar las columnas y las filas de la matriz antes de pasarla a barplot.

m2 <- m[c("G2", "G1"), c("D", "C", "B", "A")]

barplot(m2, beside = TRUE, ylim = c(0, 15),
        legend.text = TRUE,
        args.legend = list(x = "top", horiz = TRUE, bty = "n"))

Reordenar las barras de un gráfico de barras agrupadas en R

Barras agrupadas vs barras apiladas

Un gráfico de barras agrupadas facilita comparar los valores de los subgrupos, ya que todas las barras empiezan en cero. Si te interesa más el total de cada grupo y la contribución de cada subgrupo puedes crear un gráfico de barras apiladas tan solo estableciendo beside = FALSE, que es el valor por defecto.

barplot(m,
        beside = FALSE,
        legend.text = TRUE)

Gráfico de barras apiladas en R con beside FALSE

MASTER - STATISTICS DOT COM

Master Statistics

Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad

Ir al sitio
R PACKAGES IO

R Packages

Explora y descubre miles de paquetes, funciones y datasets de R

Ir al sitio

También te puede interesar