Matplotlib 密度プロット
Suraj Joshi
2023年1月30日
-
gaussian_kde()
メソッドを用いた密度プロットの生成scipy.stats
モジュールからの例 -
seaborn
パッケージからkdeplot()
メソッドを用いて密度プロットを生成する -
seaborn
パッケージからdistplot()
メソッドを用いて密度プロットを生成する -
pandas.DataFrame.plot()
メソッドでkind='density'
を設定して密度プロットを生成する
Python を用いて密度プロットを生成するには、まず scipy.stats
モジュールの gaussian_kde()
メソッドを用いて与えられたデータから密度関数を推定します。次に、密度関数をプロットして密度プロットを生成します。あるいは、seaborn
パッケージの kdeplot()
を利用するか、pandas.DataFrame.plot()
メソッドで kind='density'
を指定して密度プロットを生成することもできます。
gaussian_kde()
メソッドを用いた密度プロットの生成 scipy.stats
モジュールからの例
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import kde
data = [2, 3, 3, 4, 2, 1, 5, 6, 4, 3, 3, 3, 6, 4, 5, 4, 3, 2]
density = kde.gaussian_kde(data)
x = np.linspace(-2, 10, 300)
y = density(x)
plt.plot(x, y)
plt.title("Density Plot of the data")
plt.show()
出力:
ここではまず、gaussian_kde()
メソッドを用いて与えられたデータの密度関数を推定します。次に、-2
から 10
までの範囲の値について、plot()
メソッドを用いて密度関数をプロットします。
関数 gaussian_kde
は帯域幅を自動的に設定しているため、生成された密度プロットは十分に正確ではありません。帯域幅を設定するには、gaussian_kde
クラスの covariance_factor
関数を利用します。次に _compute_covariance
メソッドを呼び出して、すべての係数が正しく計算されて正確なプロットが生成されるようにします。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import kde
data = [2, 3, 3, 4, 2, 1, 5, 6, 4, 3, 3, 3, 6, 4, 5, 4, 3, 2]
prob_density = kde.gaussian_kde(data)
prob_density.covariance_factor = lambda: 0.25
prob_density._compute_covariance()
x = np.linspace(-2, 10, 300)
y = prob_density(x)
plt.plot(x, y)
plt.title("Density Plot of the data")
plt.show()
出力:
seaborn
パッケージから kdeplot()
メソッドを用いて密度プロットを生成する
import matplotlib.pyplot as plt
import seaborn as sns
data = [2, 3, 3, 4, 2, 1, 5, 6, 4, 3, 3, 3, 6, 4, 5, 4, 3, 2]
sns.kdeplot(data, bw=0.25)
plt.show()
出力:
このようにして、kdeplot()
メソッドにデータを渡すだけで密度プロットを生成することができます。
seaborn
パッケージから distplot()
メソッドを用いて密度プロットを生成する
また、seaborn
パッケージの distplot()
メソッドを用いて hist=False
を設定して密度プロットを生成することもできます。
import matplotlib.pyplot as plt
import seaborn as sns
data = [2, 3, 3, 4, 2, 1, 5, 6, 4, 3, 3, 3, 6, 4, 5, 4, 3, 2]
sns.distplot(data, hist=False)
plt.show()
出力:
pandas.DataFrame.plot()
メソッドで kind='density'
を設定して密度プロットを生成する
import pandas as pd
import matplotlib.pyplot as plt
data = [2, 3, 3, 4, 2, 1, 5, 6, 4, 3, 3, 3, 6, 4, 5, 4, 3, 2]
df = pd.DataFrame(data)
df.plot(kind="density")
plt.show()
出力:
著者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn