Los siguientes datos serán usados para crear las visualizaciones del presente tutorial. Copia y pega el siguiente código para poder reproducir los gráficos.
import numpy as np
import seaborn as sns
import random
# Simulación de datos
rng = np.random.RandomState(1)
variable = rng.normal(0, 2, size = 50)
random.seed(1)
grupo = random.choices(["G1", "G2", "G3"], k = 50)
grupo2 = random.choices(["A", "B"], k = 50)
df = {'variable': variable, 'grupo': grupo, 'grupo2': grupo2}
violinplot
Con seaborn es posible crear un gráfico de violín utilizando la función violinplot
, como se muestra en los siguientes ejemplos.
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = variable)
# Equivalent to:
sns.violinplot(x = "variable", data = df)
Gráfico de violín vertical
Ten en cuenta que si pasas tu variable de interés al argumento y
en lugar de al x
el gráfico se mostrará de manera vertical en lugar de horizontal.
import seaborn as sns
# Gráfico de violín
sns.violinplot(y = variable)
Color del gráfico de violín
El color del fondo del violín se puede modificar con el argumento color
de la función.
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = variable,
color = "green")
Recortar las colas de la distribución
El argumento cut
permite modificar la distancia para extender las densidades estimadas sobre los puntos de datos de los extremos. Si estableces este argumento a 0, el gráfico de violín se creará con las colas recortadas.
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = variable,
cut = 0)
Por defecto, dentro de los gráficos de violín se dibuja un gráfico de caja, pero también es posible agregar los cuartiles con líneas, las observaciones de diferentes maneras o eliminar el gráfico de caja. Para ello puedes usar el argumento inner
de la función, como se muestra en los ejemplos siguientes.
Cuartiles
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = variable,
inner = "quartile")
Puntos
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = variable,
inner = "point")
Línea para cada punto
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = variable,
inner = "stick")
No mostrar nada dentro del violín
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = variable,
inner = None)
Ten en cuenta que también puedes establecer estos argumentos cuando creas gráficos de violín por grupo.
La función violinplot
utiliza el método de Scott para calcular la ventana óptima para generar el gráfico de violín (bw = 'scott'
). Sin embargo, también es posible elegir entre el método de Silverman o elegir un factor numérico que sirva para reescalar el bandwidth calculado mediante el método de Scott.
Método de Silverman
import seaborn as sns
# Gráfico de violín
sns.violinplot(y = variable,
bw = "silverman")
Factor multiplicativo
import seaborn as sns
# Gráfico de violín
sns.violinplot(y = variable,
bw = 0.25)
Si pasas una variable categórica al argumento x
o y
y una numérica al otro argumento puedes crear gráficos de violín en base a grupos. Ten en cuenta que puedes cambiar el orden por defecto pasando una lista al argumento order
con el orden deseado.
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = grupo, y = variable)
Color por subgrupo
Si pasas una segunda variable categórica al argumento hue
los gráficos de violín se dividirán por grupo y subgrupo, tal y como muestra la siguiente imagen.
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = grupo, y = variable,
hue = grupo2)
Cuando se agrega una segunda variable, es posible solapar los violines de los subgrupos, tan solo es necesario establecer el argumento dodge
como False
.
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = grupo, y = variable,
hue = grupo2,
dodge = False)
Una alternativa a las opciones anteriores es establecer split = True
, de modo que los gráficos de violín muestren en cada uno de sus lados la estimación para cada subgrupo, como en el ejemplo siguiente.
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = grupo, y = variable,
hue = grupo2,
split = True)
Por último, si quieres personalizar la paleta de colores de los violines puedes pasar el nombre de una paleta o un diccionario que contenga los colores para cada grupo al argumento palette
.
import seaborn as sns
# Gráfico de violín
sns.violinplot(x = grupo, y = variable,
palette = "Set2")
También te puede interesar