{ES} Mejor dígalo con gráficos
By Eliana F. Burgos in ES ggplot R base gráficos
May 24, 2022
¿Qué es un gráfico estadístico y para qué nos sirven? 📊
Los gráficos estadísticos son representaciones visuales de nuestros datos y resultados estadísticos. Nos sirven para expresar de manera gráfica (valga la redundancia) tanto las medidas descriptivas básicas como estadísticos asociados a modelos o simulaciones más complejas.
Un buen gráfico, además de representar de manera clara nuestros datos y su información asociada, nos permite realizar comparaciones, destacar tendencias de los datos e ilustrarlas llamando la atención del lector.
Para que un gráfico sea realmente representativo e informativo, no solo debemos estar atentos a brindar la mayor cantidad de información posible en él, sino que además, debemos elegir el gráfico adecuado para el tipo de variable que queremos visualizar (o interacción si fuera más de una variable).
Como sabemos, podemos tener variables cualitativas (ordinales o nominales), y variables cuantitativas (discretas o continuas). No todos los gráficos permiten visualizar de manera sencilla y sin errores todos los tipos de datos.
Empezando por el principio, veamos un par de ejemplos de graficos para variables cualitativas. Primero repasaremos las opciones existentes con R base y luego con la librería ggplot2.
Gráficos para una variable cualitativa
Barplot
El barplot, o gráfico de barras o columnas, es uno de los gráficos más utilizados y representa visualmente una variable cualitativa (o categórica; eje x) y una cuantitativa (o numérica; eje y).
Veamos un ejemplo con el comando barplot().
Vamos a crear un vector con nuestra variable cualitativa a la que llamaremos “tratamiento”. Luego, calcularemos las frecuencias de cada nivel de nuestra variable, es decir, cuántas veces se repite “A”, cuantas se repite “B”, etc.
tratamiento <- as.factor(sample(c("A","B", "C", "D"), size =30, replace = TRUE))
frec.tratam <- table(tratamiento)
frec.tratam
## tratamiento
## A B C D
## 7 7 7 9
Por último graficamos.
barplot(frec.tratam)
Como dijimos al comienzo de este post, un grafico tiene que ser representativo de la información que quiero visualizar. Por lo que siempre tiene que ir acompañado de los nombres de ejes y en lo posible un título.
barplot(frec.tratam,
xlab = "Tratamiento", #nombre al eje x
ylab= "Frecuencia",#nombre del eje Y
main= "Tratamientos finalizados"# título del gráfico
)
Los colores por defecto son en escalas de grises, a menos que especifiquemos lo contrario. Podemos indicar qué colores queremos de la siguiente forma:
barplot(frec.tratam,
xlab = "Tratamiento", #nombre al eje x
ylab= "Frecuencia",#nombre del eje Y
main= "Tratamientos finalizados",# título del gráfico
col= "red", #color de las barras
)
Si quisieramos que cada tratamiento tenga un color específico, por ejemplo que “A” sea negro, “B” gris, “C” azul y “D” rojo, tenemos que indicarlo en el orden en que R identifica los niveles de la variable, en esta caso, en orden alfabético. Veamos como programarlo:
barplot(frec.tratam,
xlab = "Tratamiento", #nombre al eje x
ylab= "Frecuencia",#nombre del eje Y
main= "Tratamientos finalizados",# título del gráfico
col= c("black", "grey", "blue", "red")#color de las barras
)
También podemos colorear las barres con otra gama de colores que podemos visualizar en: https://r-graph-gallery.com/ggplot2-color.html.
barplot(frec.tratam,
xlab = "Tratamiento", #nombre al eje x
ylab= "Frecuencia",#nombre del eje Y
main= "Tratamientos finalizados",# título del gráfico
col= c("cyan1", "coral1", "darkorchid1", "darkseagreen3")#color de las barras
)
Podemos modificar los bordes para que sean del mismo color de relleno de la siguiente forma:
barplot(frec.tratam,
xlab = "Tratamiento", #nombre al eje x
ylab= "Frecuencia",#nombre del eje Y
main= "Tratamientos finalizados",# título del gráfico
col= c("cyan1", "coral1", "darkorchid1", "darkseagreen3"),#defino los bordes#color de las barras
border=c("cyan1", "coral1", "darkorchid1", "darkseagreen3") #defino el color de los bordes
)
Además puedo definir el ancho de nuestras barras:
barplot(frec.tratam,
xlab = "Tratamiento", #nombre al eje x
ylab= "Frecuencia",#nombre del eje Y
main= "Tratamientos finalizados",# título del gráfico
col= c("cyan1", "coral1", "darkorchid1", "darkseagreen3"),#defino los bordes#color de las barras
border=c("cyan1", "coral1", "darkorchid1", "darkseagreen3"), #defino el color de los bordes
width= c(0.4,0.8,1,1.2)#cambio el ancho de las barras
)
Y si no nos interesa el ancho de las barras, pero queremos que haya una mayor separación entre las mismas usamos el siguiente comandito:
barplot(frec.tratam,
xlab = "Tratamiento", #nombre al eje x
ylab= "Frecuencia",#nombre del eje Y
main= "Tratamientos finalizados",# título del gráfico
col= c("cyan1", "coral1", "darkorchid1", "darkseagreen3"),#defino los bordes#color de las barras
border=c("cyan1", "coral1", "darkorchid1", "darkseagreen3"), #defino el color de los bordes
space=(1)#cambio la separación entre barras
)
En el caso de que no queramos colores solidos en nuestras barras, y que quisieramos diferenciales con entramados podemos programarlo de la siguiente forma:
barplot(frec.tratam,
xlab = "Tratamiento", #nombre al eje x
ylab= "Frecuencia",#nombre del eje Y
main= "Tratamientos finalizados",# título del gráfico
density=c(18,14,10,14,18), #defino el entramado (cantidad de lineas)
angle=c(0,45,90,11,36), #defino el angulo del entramado
col="black" #color del entramado
)
Barplot con ggplot2
Para poder graficar con ggplot2 tenemos que recordar que los gráficos tiene una estructura específica y que debemos programar cada elemento del gráfico, los cuales son:
- data: nuestra base de datos debe estar configurada como dataframe;
- aesthetics (o aes): define las relaciones de las variables que queremos graficar, así como algunos aspectos del gráfico;
- geometrias: especifican cual elemento gráfico se utilizará para visualizar los datos.
Estos elementos se agregan en capas o layers y vamos a ver algunos ejemplos a continuación, siguiendo con el dataset que creamos al principio del post.
Para comenzar, vamos a crear un data frame a partir de nuestros datos de “tratamiento”; luego vamos a cargar la libreria “ggplot2” y realizar un gráfico de barras sencillo.
La función por defecto de ggplot - para este tipo de grafico - es stat="count"
, que cuenta el número de observaciones de cada valor, es decir, la frecuencia de dicho dato. Otra opción es utilizar stat="identity"
, que grafica el valor del dato sin modificarlo. Como en este ejemplo estamos utilizando una única variable que es categórica, y lo que queremos graficar es su frecuencia, utilizaremos la funcion por defecto.
## Del vector al dataframe
datos<- as.data.frame(tratamiento)
## Cargue el paquete ggplot
library(ggplot2)
## ¡Y crea el gráfico!
ggplot(datos) + # defino el data set con el que voy a trabajar
geom_bar(aes(x=tratamiento)) # defino al geometria del gráfico y los ejes
Le agregamos los nombres a los ejes, un título a nuestro gráfico y definimos las marcas del eje y:
ggplot(datos) + # defino el data set con el que voy a trabajar
geom_bar(aes(x=tratamiento)) + #defino al geometria del gráfico y los ejes
xlab("Tratamientos") + # agrego el nombre del eje X
ylab ("Frecuencia") + # agrego el nombre del eje Y
ggtitle("Tratamientos finalizados") + # agrego el título
scale_y_continuous(breaks = c(0,1,2,3, 4,5, 6,7,8,9,10)) # establezco donde estan mis marcas del eje y
Con el comando theme()
podemos modificar varios elementos estéticos del gráfico y utilizar temas ya creados. En este ejemplo, usaremos uno de esos temas para modificar el fondo y caja del gráfico (Podes consultar otros temas acá: https://ggplot2.tidyverse.org/reference/ggtheme.html).
ggplot(datos)+#defino el data set con el que voy a trabajar
geom_bar(aes(x=tratamiento))+ #defino al geometria del gráfico y los ejes
xlab("Tratamientos")+#agrego el nombre del eje X
ylab ("Frecuencia")+#agrego el nombre del eje Y
ggtitle("Tratamientos finalizados")+
scale_y_continuous(breaks = c(0,1,2,3, 4,5, 6,7,8,9,10))+#establezco donde estan mis marcas del eje y#agrego el título
theme_bw()#defino mi tema
Si queremos cambiar los colores de las barras, tenemos que indicar que queremos que se diferencien nuestras columnas en el aes de la geometria con el comando fill=
:
ggplot(datos) +#defino el data set con el que voy a trabajar
geom_bar(aes(x=tratamiento), fill=c("black", "grey", "blue", "red")) + #defino al geometria del gráfico y los ejes
xlab("Tratamientos") +#agrego el nombre del eje X
ylab ("Frecuencia") +#agrego el nombre del eje Y
ggtitle("Tratamientos finalizados") +
scale_y_continuous(breaks = c(0,1,2,3, 4,5, 6,7,8,9,10)) +#establezco donde estan mis marcas del eje y#agrego el título
theme_bw()#defino mi tema