Trama de violín con Seaborn
La función violinplot()
crea un gráfico de este tipo y representa la distribución como una combinación entre el gráfico de densidad del núcleo y un diagrama de caja. Es muy utilizado por analistas y estadísticos para comprender la distribución de datos categóricos. Su principal ventaja sobre los diagramas de caja tradicionales es que también se pueden usar para distribuciones con múltiples picos.
La figura del violín en la trama puede ser un poco difícil de entender, pero puede representar diferentes valores estadísticos. La siguiente figura explicará esto.
Aparte de DataFrames, la función violinplot()
puede trabajar con un objeto de una sola serie, un array numpy o un vector de lista.
En el siguiente ejemplo, trazaremos la distribución del diagrama de violín de una sola variable.
import random
import numpy as np
n = random.sample(range(0, 50), 30)
arr = np.array(n)
sns.violinplot(n)
Tenga en cuenta que el tamaño de la muestra tiene un gran impacto en la figura final de la trama del violín. El gráfico puede ser engañoso para un tamaño de muestra pequeño. Si esto todavía es un poco confuso, se puede trazar un diagrama de dispersión simple sobre el diagrama del violín para obtener una mejor comprensión.
Por ejemplo,
import random
import numpy as np
n = random.sample(range(0, 50), 30)
arr = np.array(n)
sns.violinplot(n)
sns.stripplot(n, color="red")
La función stripplot()
aquí traza un diagrama de dispersión sobre el diagrama de violín. De manera similar, también puede trazar un diagrama de caja sobre el diagrama de violín para comprender la similitud y las diferencias entre ambos.
El uso principal de violinplot()
radica en conjuntos de datos, que muestran distribuciones de datos con múltiples categorías. En el siguiente código, implementaremos esto.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(
{
"Quantity": [5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8],
"Price": [9, 10, 15, 16, 13, 14, 15, 18, 11, 12, 14, 15, 16, 17, 18, 19],
"Day": [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2],
"Product": [
"A",
"A",
"A",
"A",
"B",
"B",
"B",
"B",
"A",
"A",
"A",
"A",
"B",
"B",
"B",
"B",
],
}
)
sns.violinplot(data=df, y="Price", x="Quantity", hue="Product")
Observe cómo pudimos graficar eficientemente las distribuciones del precio de dos productos diferentes en diferentes cantidades en dos días. Observe el uso del parámetro hue
para trazar dos productos con colores diferentes.
Se pueden usar muchos otros argumentos para ajustar y modificar la figura final. Podemos utilizar el parámetro split
para comparar las categorías fácilmente. Su pedido se puede gestionar mediante el parámetro order
. Cada observación se puede mostrar dentro del gráfico utilizando el parámetro inner
.
En el código siguiente, intentamos utilizar algunos de estos argumentos.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(
{
"Quantity": [5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8],
"Price": [9, 10, 15, 16, 13, 14, 15, 18, 11, 12, 14, 15, 16, 17, 18, 19],
"Day": [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2],
"Product": [
"A",
"A",
"A",
"A",
"B",
"B",
"B",
"B",
"A",
"A",
"A",
"A",
"B",
"B",
"B",
"B",
],
}
)
sns.violinplot(
data=df, y="Price", x="Quantity", hue="Product", inner="stick", split=True
)
La función violinplot()
devuelve un objeto de tipo matplotlib axes para usar todas esas funciones matplotlib para personalizar la figura final. Si queremos devolver un objeto de tipo FacetGrid
, podemos utilizar la función catplot()
y especificar el parámetro kind
como violin
.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn