potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

Python&SciPy&matplotlib 2つの正規分布の曲線と重複領域を描画する

SciPyとmatplotlibの学習で書いたコードです。実行するとパラメーターの異なる2つの正規分布とそれらの重複領域を描画します。

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

# 正規分布のPDF
f1 = lambda x: norm.pdf(x, -5, 5)
f2 = lambda x: norm.pdf(x, 8, 3)

# グラフのプロット
plt.rcParams["font.family"] = "MS Gothic" #日本語表示対応
fig, ax = plt.subplots()
x = np.linspace(-20, 20, 1000)

#2つの正規分布のPDFを描画する。
y1 = f1(x)
y2 = f2(x)
ax.plot(x, y1, color="black")
ax.plot(x, y2, color="black")

#共通部分を半分ずつ塗りつぶす
#右側
ax.fill_between(x, y1, where=y1<y2)
#左側
ax.fill_between(x, y2, where=y1>y2)

ax.set_ylim(bottom=0) #y軸を0開始正方向にする。
ax.set_title("2つの正規分布のPDFと重複領域")
ax.set_xlabel("確率変数")
ax.set_ylabel("確率")
plt.show()