【matplotlib】バイオリンプロット(Violin Plot)を描く方法[Python]

  • URLをコピーしました!
目次

matplotlib

前回、PythonのNumPyで任意の平均・標準誤差をもつガウス分布(正規分布)を作る方法を紹介しました。

今回はmatplotlibでバイオリンプロット(Violin Plot)を描く方法を紹介します。

それでは始めていきましょう。

バイオリンプロットの描き方

バイオリンプロットを描くには「plt.violinplot(データ)」とします。

今回は前回紹介したNumPyの乱数ジェネレータを使って、任意の平均・標準誤差をもつガウス分布(正規分布)を使って試していきましょう。

import matplotlib.pyplot as plt
import numpy as np

sample_num = 1000

rng = np.random.default_rng(0)

data_list = rng.normal(2, 1, sample_num)

fig = plt.figure()
plt.clf()

plt.violinplot(data_list)

plt.show()

実行結果

複数のデータを用いて、複数のバイオリンプロットを並べたい場合は「plt.violinplot()」に二次元配列を渡します。

import matplotlib.pyplot as plt
import numpy as np

data_num = 5
sample_num = 1000

rng = np.random.default_rng(0)

data_list = [rng.normal(2*i, i, sample_num) for i in range(1, data_num+1)]

fig = plt.figure()
plt.clf()

plt.violinplot(data_list)

plt.show()

複数のバイオリンプロットを重ねるにはデータを一つ一つプロットします。

import matplotlib.pyplot as plt
import numpy as np

data_num = 5
sample_num = 1000

rng = np.random.default_rng(0)

data_list = [rng.normal(2*i, i, sample_num) for i in range(1, data_num+1)]

fig = plt.figure()
plt.clf()

for data in data_list:
    plt.violinplot(data)

plt.show()

実行結果

平均値、中央値の表示

平均値を表示するには「showmeans=True」のオプション引数を追加します。

import matplotlib.pyplot as plt
import numpy as np

data_num = 5
sample_num = 1000

rng = np.random.default_rng(0)

data_list = [rng.normal(2*i, i, sample_num) for i in range(1, data_num+1)]

fig = plt.figure()
plt.clf()

plt.violinplot(data_list, showmeans=True)

plt.show()

実行結果

中央値を表示する場合は「showmedians=True」のオプション引数を追加します。

import matplotlib.pyplot as plt
import numpy as np

data_num = 5
sample_num = 1000

rng = np.random.default_rng(0)

data_list = [rng.normal(2*i, i, sample_num) for i in range(1, data_num+1)]

fig = plt.figure()
plt.clf()

plt.violinplot(data_list, showmedians=True)

plt.show()

実行結果

極限領域の非表示化

極限領域(最大値、最小値)はデフォルトで表示されていますが、消したい場合は「showextrema=False」をオプション引数に追加します。

import matplotlib.pyplot as plt
import numpy as np

data_num = 5
sample_num = 1000

rng = np.random.default_rng(0)

data_list = [rng.normal(2*i, i, sample_num) for i in range(1, data_num+1)]

fig = plt.figure()
plt.clf()

plt.violinplot(data_list, showextrema=False)

plt.show()

実行結果

横向き表示

バイオリンプロットを横向きにしたい場合は「vert=False」をオプション引数として追加します。

import matplotlib.pyplot as plt
import numpy as np

data_num = 5
sample_num = 1000

rng = np.random.default_rng(0)

data_list = [rng.normal(2*i, i, sample_num) for i in range(1, data_num+1)]

fig = plt.figure()
plt.clf()

plt.violinplot(data_list, vert=False)

plt.show()

実行結果

プロットの太さを変更

プロットの太さを変更するには「widths=値」をオプション引数として追加します。

import matplotlib.pyplot as plt
import numpy as np

data_num = 5
sample_num = 1000

rng = np.random.default_rng(0)

data_list = [rng.normal(2*i, i, sample_num) for i in range(1, data_num+1)]

fig = plt.figure()
plt.clf()

plt.violinplot(data_list, widths=2)

plt.show()

実行結果

プロットの滑らかさを変更

プロットの滑らかさを変更するには「points=値」をオプション引数として追加します。

これはプロットを何箇所の点で表示するかという値で、点が少ないほどカクカクのプロットになり、点が多いほど滑らかなプロットになります。

import matplotlib.pyplot as plt
import numpy as np

data_num = 5
sample_num = 1000

rng = np.random.default_rng(0)

data_list = [rng.normal(2*i, i, sample_num) for i in range(1, data_num+1)]

fig = plt.figure()
plt.clf()

plt.violinplot(data_list, points=5)

plt.show()

実行結果
import matplotlib.pyplot as plt
import numpy as np

data_num = 5
sample_num = 1000

rng = np.random.default_rng(0)

data_list = [rng.normal(2*i, i, sample_num) for i in range(1, data_num+1)]

fig = plt.figure()
plt.clf()

plt.violinplot(data_list, points=200)

plt.show()

実行結果

次回はヒストグラム用のガウス分布(正規分布)に従うランダムな値のリストを複数生成する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次