Introducción
En este laboratorio, aprenderemos a personalizar los diagramas de violín utilizando Matplotlib. Los diagramas de violín son una herramienta poderosa para visualizar la distribución y densidad de datos. Al personalizar la apariencia del gráfico, podemos crear visualizaciones más informativas y visualmente atractivas.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y resolveremos rápidamente el problema para usted.
Crear datos de prueba
Primero, crearemos algunos datos de prueba para utilizar en el diagrama de violín. Utilizaremos NumPy para generar cuatro matrices de 100 valores distribuidos normalmente con desviaciones estándar crecientes.
import matplotlib.pyplot as plt
import numpy as np
## create test data
np.random.seed(19680801)
data = [sorted(np.random.normal(0, std, 100)) for std in range(1, 5)]
Crear un diagrama de violín predeterminado
A continuación, crearemos un diagrama de violín predeterminado utilizando la función violinplot de Matplotlib. Esto proporcionará una línea base para la comparación cuando personalicemos el gráfico en pasos posteriores.
## create default violin plot
fig, ax1 = plt.subplots()
ax1.set_title('Default Violin Plot')
ax1.set_ylabel('Observed Values')
ax1.violinplot(data)
Personalizar la apariencia del diagrama de violín
Ahora personalizaremos la apariencia del diagrama de violín. Primero, limitaremos lo que Matplotlib dibuja estableciendo los argumentos showmeans, showmedians y showextrema en False. Luego, cambiaremos el color y la opacidad de los cuerpos del violín utilizando los métodos set_facecolor y set_alpha. Finalmente, agregaremos una representación simplificada de un diagrama de caja encima del diagrama de violín, utilizando la función percentile de NumPy para calcular los cuartiles, la mediana y las bigotes.
## customize violin plot appearance
fig, ax2 = plt.subplots()
ax2.set_title('Customized Violin Plot')
ax2.set_ylabel('Observed Values')
## create violin plot
parts = ax2.violinplot(
data, showmeans=False, showmedians=False,
showextrema=False)
## customize violin bodies
for pc in parts['bodies']:
pc.set_facecolor('#D43F3A')
pc.set_edgecolor('black')
pc.set_alpha(1)
## add box plot
quartile1, medians, quartile3 = np.percentile(data, [25, 50, 75], axis=1)
whiskers = np.array([
adjacent_values(sorted_array, q1, q3)
for sorted_array, q1, q3 in zip(data, quartile1, quartile3)])
whiskers_min, whiskers_max = whiskers[:, 0], whiskers[:, 1]
inds = np.arange(1, len(medians) + 1)
ax2.scatter(inds, medians, marker='o', color='white', s=30, zorder=3)
ax2.vlines(inds, quartile1, quartile3, color='k', linestyle='-', lw=5)
ax2.vlines(inds, whiskers_min, whiskers_max, color='k', linestyle='-', lw=1)
Establecer el estilo de los ejes
Finalmente, estableceremos el estilo para el eje x especificando las etiquetas de los ticks y los límites. Definiremos una función auxiliar set_axis_style para lograr esto.
## set style for the axes
labels = ['A', 'B', 'C', 'D']
set_axis_style(ax2, labels)
def set_axis_style(ax, labels):
ax.set_xticks(np.arange(1, len(labels) + 1))
ax.set_xticklabels(labels)
ax.set_xlim(0.25, len(labels) + 0.75)
ax.set_xlabel('Sample Name')
Resumen
En este laboratorio, aprendimos cómo personalizar la apariencia de los diagramas de violín utilizando Matplotlib. Creamos un diagrama de violín predeterminado, luego lo modificamos cambiando el color y la opacidad de los cuerpos del violín y agregando una representación simplificada de un diagrama de caja encima. También establecimos el estilo para las etiquetas de los ticks del eje x y los límites. Al personalizar la apariencia del gráfico, podemos crear visualizaciones más informativas y visualmente atractivas.