Trama de violino usando Seaborn

Manav Narula 15 fevereiro 2024
Trama de violino usando Seaborn

A função violinplot() cria esse gráfico e descreve a distribuição como uma combinação entre o gráfico de densidade do kernel e um boxplot. É muito usado por analistas e estatísticos para entender a distribuição de dados categóricos. Sua principal vantagem sobre os boxplots tradicionais é que eles também podem ser usados ​​para distribuições com vários picos.

A figura do violino na trama pode ser um pouco difícil de entender, mas pode representar diferentes valores estatísticos. A figura a seguir explica isso.

informação da figura do violino

Além de DataFrames, a função violinplot() pode funcionar com um único objeto de série, matriz numpy ou vetor de lista.

No exemplo a seguir, vamos representar graficamente a distribuição do gráfico do violino de uma única variável.

import random
import numpy as np

n = random.sample(range(0, 50), 30)
arr = np.array(n)
sns.violinplot(n)

trama de violino no mar

Observe que o tamanho da amostra tem um grande impacto na figura final do enredo do violino. O gráfico pode ser enganoso para um tamanho de amostra pequeno. Se isso ainda for um pouco confuso, pode-se fazer um gráfico de dispersão simples sobre o gráfico do violino para obter um melhor entendimento.

Por exemplo,

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")

trama de violino no mar com um tamanho de amostra diferente

A função stripplot() aqui traça um gráfico de dispersão sobre o gráfico do violino. Da mesma forma, você também pode traçar um gráfico de caixa sobre o gráfico de violino para entender a semelhança e as diferenças entre os dois.

O principal uso do violinplot() reside em conjuntos de dados, mostrando distribuições de dados com várias categorias. No código abaixo, vamos implementar isso.

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")

trama de violino no mar mostrando a distribuição de dados

Observe como fomos capazes de traçar com eficiência as distribuições do preço de dois produtos diferentes em quantidades diferentes em dois dias. Observe o uso do parâmetro hue para plotar dois produtos com cores diferentes.

Muitos outros argumentos podem ser usados ​​para ajustar e modificar a figura final. Podemos usar o parâmetro split para comparar as categorias facilmente. Seu pedido pode ser gerenciado usando o parâmetro order. Cada observação pode ser mostrada dentro do gráfico usando o parâmetro inner.

No código abaixo, tentamos usar alguns desses 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
)

enredo de violino em seaborn com o parâmetro interno

A função violinplot() retorna um objeto do tipo eixo matplotlib para usar todas essas funções matplotlib para personalizar a figura final. Se quisermos retornar um objeto do tipo FacetGrid, podemos usar a função catplot() e especificar o parâmetro kind como violin.

Manav Narula avatar Manav Narula avatar

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