Nota
Haga clic aquí para descargar el código de ejemplo completo
Comparación de diagrama de caja y diagrama de violín #
Tenga en cuenta que aunque los diagramas de violín están estrechamente relacionados con los diagramas de caja de Tukey (1977), agregan información útil, como la distribución de los datos de la muestra (traza de densidad).
De forma predeterminada, los diagramas de caja muestran puntos de datos fuera de 1,5 * del rango intercuartílico como valores atípicos por encima o por debajo de los bigotes, mientras que los diagramas de violín muestran el rango completo de los datos.
Una buena referencia general sobre diagramas de caja y su historia se puede encontrar aquí: http://vita.had.co.nz/papers/boxplots.pdf
Los diagramas de violín requieren matplotlib >= 1.4.
Para obtener más información sobre diagramas de violín, los documentos de scikit-learn tienen una excelente sección: https://scikit-learn.org/stable/modules/density.html
import matplotlib.pyplot as plt
import numpy as np
fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(9, 4))
# Fixing random state for reproducibility
np.random.seed(19680801)
# generate some random test data
all_data = [np.random.normal(0, std, 100) for std in range(6, 10)]
# plot violin plot
axs[0].violinplot(all_data,
showmeans=False,
showmedians=True)
axs[0].set_title('Violin plot')
# plot box plot
axs[1].boxplot(all_data)
axs[1].set_title('Box plot')
# adding horizontal grid lines
for ax in axs:
ax.yaxis.grid(True)
ax.set_xticks([y + 1 for y in range(len(all_data))],
labels=['x1', 'x2', 'x3', 'x4'])
ax.set_xlabel('Four separate samples')
ax.set_ylabel('Observed values')
plt.show()

Referencias
En este ejemplo se muestra el uso de las siguientes funciones, métodos, clases y módulos: