Los histogramas, box-plots y diagramas de violín son de los gráficos más empleados y útiles en la visualización de datos para variables cuantitativas de tipo continuo.

Vamos a ver cómo generar este tipo de gráficos con ggplot2. En primer lugar, cargamos la librería ggplot2.

library(ggplot2)

Para trabajar con los distintos tipos de gráficos, consideremos el conjunto de datos reales sobre la estructura salarial en España en el año 2018. Este conjunto de datos tiene una variable cualitativa Sexo con dos factores; una variable cuantitativa discreta AgnoAnti, que indica los años de antigüedad, y 6 variables cuantitativas continuas: SalarioBase, que indica el salario base mensual, Complementos, que representa los complementos salariales recibidos mensualmente, IRPF indica las retenciones IRPF mensuales, BaseSS proporciona la base de cotización a la Seguridad Social, CotizaSS es la cotización realizada a la Seguridad Social, y finalmente SalarioBruto indica el salario bruto anual.

Recuerda situarte en el directorio correcto para leer los datos.

if(!"readxl" %in% installed.packages())
  install.packages("readxl")

library(readxl)
data <- read_excel("Salario2018.xlsx")

Como tenemos distintas variables cuantitativas continuas, podemos trabajar con las mismas para realizar los distintos gráficos. Además, como disponemos de una variable cualitativa, Sexo, vamos a mostrar que ésta nos permite realizar sobre una misma representación el mismo gráfico diferenciado por ejemplo por colores. Esto es, por ejemplo, considerando la variable SalarioBase vamos a representar el histograma según la variable Sexo.

Para representar el histograma utilizamos la función geom_histogram() de la librería ggplot2, y como queremos diferenciar dicha variable según el sexo, vamos a utilizar distintos colores, de modo que en la estética del gráfico aes() indicaremos que fill=Sexo. Dentro de las características que se pueden modificar en el histograma, nos encontramos bins que indica el número de barras a representar, y alpha que permite controlar la transparencia de los histogramas.

ggplot(data)+
  aes(x=SalarioBase,fill=Sexo)+
  geom_histogram(bins=50,alpha=0.75)

Como hemos visto en gráficos anteriores, podemos modificar los títulos de los ejes, y del gráfico, cambiar la leyenda, y el tema del gráfico. En este caso, las barras están apiladas. Si lo que interesa es comprobar los histogramas separados, añadimos position="identity.

ggplot(data)+
  aes(x=SalarioBase,fill=Sexo)+
  geom_histogram(bins=50,alpha=0.75,position="identity")+
  labs(title="Histograma",x="Salario Base",y="")+
  guides(colour="none")+
  theme_bw()

Podemos observar que en el histograma se muestran las frecuencias absolutas de las barras. Si queremos mostrar la frecuencia relativa, que está asociada a la función de densidad, en la función geom_histogram() debemos añadir aes(y=..density..) .

ggplot(data)+
  aes(x=SalarioBase,fill=Sexo)+
  geom_histogram(aes(y=..density..),bins=50,alpha=0.75,position="identity")+
  labs(title="Histograma",x="Salario Base",y="")+
  guides(colour="none")+
  theme_minimal()

Por otro lado, si en lugar de mostrar los histogramas se quiere representar las densidades, debemos utilizar la función geom_density().

ggplot(data)+
  aes(x=SalarioBase,fill=Sexo)+
  geom_density(alpha=0.75)+
  labs(title="Densidad",x="Salario Base",y="")+
  guides(colour="none")+
  theme_minimal()

La librería ggplot2 permite representar a la vez tanto el histograma como la densidad. Para mostrarlo con claridad, debemos indicar que la transparencia de las densidades sea 0. Además, podemos modificar el tipo de línea y el color de la función de densidad según el sexo, para ello se añade aes(linetype=Sexo,colour=Sexo).

ggplot(data)+
  aes(x=SalarioBase,fill=Sexo)+
  geom_histogram(aes(y=..density..),bins=50,alpha=0.75,position="identity")+
  geom_density(aes(linetype=Sexo,colour=Sexo),alpha=0)+
  labs(title="",x="Salario Base",y="")+
  theme_classic()

En cuanto a los Box-plot o diagramas de cajas y bigotes, en la librería ggplot2 se obtiene con la función geom_boxplot().

ggplot(data)+
  aes(x=SalarioBase,fill=Sexo)+
  geom_boxplot(alpha=0.5)+
  labs(title="Box-plot",x="Salario Base",y="")+
  theme_light()

Finalmente, la librería ggplot2 permite crear un gráfico, llamado diagrama de violin, que unifica la función de densidad del gráfico junto con el formato del gráfico Box-plot. Para obtenerlo, se utiliza la función geom_violin(). En el eje x debemos situar la variable Sexo y en el eje y la variable SalarioBase, y como consecuencia no tiene sentido añadir una leyenda, por lo que utilizando la función guides() se puede eliminar.

ggplot(data)+
  aes(x=Sexo,y=SalarioBase,fill=Sexo)+
  geom_violin(alpha=0.5)+
  labs(title="Diagrama de violin",x="Salario Base",y="")+
  guides(fill="none")+
  theme_bw()