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

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

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


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

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


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

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)

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

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)

Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad
Ir al sitio
También te puede interesar