Seaborn を使用したバイオリン図

Manav Narula 2021年11月20日
Seaborn を使用したバイオリン図

violinplot() 関数はそのようなグラフを作成し、カーネル密度グラフと箱ひげ図の組み合わせのように分布を示します。これは、カテゴリデータの分布を理解するために分析および統計学者によって頻繁に使用されます。従来の箱ひげ図に対するその主な利点は、複数のピークを持つ分布にも使用できることです。

プロットのバイオリンの図は少し理解しにくいかもしれませんが、異なる統計値を表すことができます。次の図でこれを説明します。

ヴァイオリンフィギュア情報

DataFrames とは別に、violinplot() 関数は、単一の系列オブジェクト、numpy 配列、またはリストベクトルで機能します。

次の例では、単一の変数のバイオリン図の分布をプロットします。

import random
import numpy as np

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

Seaborn のバイオリン図

サンプルサイズは、バイオリン図の最終的な数値に大きな影響を与えることに注意してください。サンプルサイズが小さい場合、プロットは誤解を招く可能性があります。それでも少し混乱する場合は、バイオリン図の上に単純な散布図をプロットして、理解を深めることができます。

例えば、

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

異なるサンプルサイズの Seaborn のバイオリン図

ここでの stripplot() 関数は、バイオリン図の上に散布図をプロットします。同様に、バイオリン図の上に箱ひげ図をプロットして、両方の類似点と相違点を理解することもできます。

violinplot() の主な用途はデータセットであり、複数のカテゴリのデータの分布を示します。以下のコードでは、これを実装します。

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

データ分布を示す Seaborn のバイオリン図

2つの異なる製品の価格の分布を 2 日間で異なる数量で効率的にプロットできたことに注目してください。hue パラメーターを使用して、異なる色で 2つの製品をプロットしていることに注意してください。

他の多くの引数を使用して、最終的な図を微調整および変更できます。split パラメータを使用して、カテゴリを簡単に比較できます。それらの順序は、order パラメーターを使用して管理できます。各観測値は、inner パラメーターを使用してプロット内に表示できます。

以下のコードでは、これらの引数のいくつかを使用しようとしています。

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
)

内部パラメータを使用した Seaborn のバイオリン図

violinplot() 関数は、matplotlib axis-type オブジェクトを返し、そのようなすべての matplotlib 関数を使用して最終的な図をカスタマイズします。FacetGrid タイプのオブジェクトを返したい場合は、catplot() 関数を使用して、kind パラメーターを violin として指定できます。

著者: Manav Narula
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