12.4 Gráficas de barras
Este es quizás el tipo de gráfico mejor conocido de todos. Una gráfica de este tipo nos muestra la frecuencia con la que se han observado los datos de una variable discreta, con una barra para cada categoría de esta variable.
La función plot()
puede generar gráficos de barra si damos como argumento x
un vector de factor o cadena de texto, sin dar un argumento y
.
Por ejemplo, creamos una gráfica de barras de la variable educación (“education”) de banco
#plot(x = banco$education)
Al igual que con los histogramas, obtenemos un resultado aceptable no obstante el esfuerzo mínimo que hemos hecho para generar nuestra gráfica de barras.
Podemos ajustar los parámetros gráficos con los argumentos main
, xlab
, ylab
y col
. En este caso, podemos darle a col
un vector de colores, uno por barra, para que cada una sea distinta.
#plot(x = banco$education, main = "Gráfica de Educacíón",
# xlab = "Nivel educativo", ylab = "Frecuencia",
# col = c("royalblue", "seagreen", "purple", "grey"))
La combinación de colores puede mejorar, pero ya tenemos una gráfica de barras presentable.
Sin embargo, hay ocasiones en las que deseamos usar gráficas de barras para presentar proporciones, que deseamos barras apiladas. Para esos casos, usamos la función barplot()
.
12.4.1 La función barplot()
Además de usar plot()
, podemos crear gráficas de barra con la función barplot()
.
barplot
pide como argumento una matriz, que represente una tabla de contingencia con los datos a graficar. Este tipo de tablas pueden ser generadas con la función table()
.
table()
pide como argumento uno o más vectores, de preferencia variables discretas. Si damos sólo un vector como argumento, devuelve un conteo, si damos dos o más variables, devuelve tablas de contingencia.
Por ejemplo, el conteo de la variable education,
table(banco$education)
##
## primary secondary tertiary unknown
## 678 2306 1350 187
Si damos como argumentos la variable education y la variable loan (préstamo), obtenemos una tabla de contingencia, que asignaremos al objeto tab_banco
.
<- table(banco$loan, banco$education)
tab_banco
# Resultado
tab_banco
##
## primary secondary tertiary unknown
## no 584 1890 1176 180
## yes 94 416 174 7
Damos como argumento tab_banco
a barplot()
y nos devuelve una gráfica de barras apiladas.
barplot(tab_banco)
Si deseamos graficar proporciones en lugar de conteos, usamos la función prop.table()
.
Esta función nos pide como argumento una tabla de contingencia generada por table()
. y un número para margin
. El argumento margin
es similar a MARGIN
de apply()
(como vimos en el capítulo 10).
- Si damos como argumento 1, las proporciones se calcularán agrupadas por renglón. La suma de proporciones por renglón será igual a 1.
- Si damos como argumento 2, las proporciones se calcularán agrupadas por columna. La suma de proporciones por columna será igual a 1
- Si no damos ningún argumento, las proporciones se calcularán usando toda la tabla como grupo. La suma de proporciones de todas las celdas en la tabla será igual a 1.
Para ilustrar esto, veamos los tres casos para margin
usando como argumento nuestro objeto tab_banco
.
# Proporción por renglón
prop.table(tab_banco, margin = 1)
##
## primary secondary tertiary unknown
## no 0.15248042 0.49347258 0.30704961 0.04699739
## yes 0.13603473 0.60202605 0.25180897 0.01013025
# Porporción por columna
prop.table(tab_banco, margin = 2)
##
## primary secondary tertiary unknown
## no 0.86135693 0.81960104 0.87111111 0.96256684
## yes 0.13864307 0.18039896 0.12888889 0.03743316
# Porporción por tabla
prop.table(tab_banco)
##
## primary secondary tertiary unknown
## no 0.12917496 0.41804910 0.26011944 0.03981420
## yes 0.02079186 0.09201504 0.03848706 0.00154833
Nosotros queremos obtener las proporciones por columna, así que usaremos margin = 2
.
<- prop.table(tab_banco, margin = 2) ptab_banco
Damos el resultado de la operación anterior a barplot()
.
barplot(ptab_banco)
Hemos obtenido el resultado esperado, pero podemos mejorar la presentación. Nota que con barras apiladas el argumento col
se puede usar para colorear las categorías al interior de las barras.
barplot(ptab_banco, main = "Préstamos por nivel educativo",
xlab = "Nivel educativo", ylab = "Proporción",
col = c("royalblue", "grey"))
Luce bien, pero tenemos un problema: no sabemos qué representan las categorías en nuestras barras apiladas viendo solamente nuestra gráfica.
Nosotros podemos consultar directamente con los datos, pero una persona que vea por primera vez esta gráfica no tendrá esa opción, reduciendo con ello su utilidad.
Para solucionar este problema, usamos leyendas.