PythonとChatGPTでガウス分布を描いてみる

確率分布の図を説明スライド用に用意したいと思って「ガウス分布　パワポ」などで検索した。複雑な方法でガウス分布を描いている人がたくさんいたが、google slidesで作れずexcelを開くのも面倒なのでChatGPTに聞いてみたら5分程度でいい感じの図が作成できたのでメモ。

とりあえずchatGPTを開いて

「make a code to visualize 2 gaussian curves that intersect」

と入力してみるとこんなコードが返ってきた。

```Python
import numpy as np
import matplotlib.pyplot as plt

# Define the parameters for the two Gaussians
mu1 = 2.5
sigma1 = 1.0
mu2 = 3.5
sigma2 = 0.8

# Create the x-axis values
x = np.linspace(-1, 8, 1000)

# Calculate the y-axis values for the two Gaussians
y1 = 1/(sigma1 * np.sqrt(2 * np.pi)) * np.exp( - (x - mu1)**2 / (2 * sigma1**2) )
y2 = 1/(sigma2 * np.sqrt(2 * np.pi)) * np.exp( - (x - mu2)**2 / (2 * sigma2**2) )

# Find the intersection point of the two curves
idx = np.argwhere(np.diff(np.sign(y1 - y2))).flatten()
intersection_x = x[idx]
intersection_y = y1[idx]

# Plot the two Gaussians and their intersection point
plt.plot(x, y1, label='Gaussian 1')
plt.plot(x, y2, label='Gaussian 2')
plt.plot(intersection_x, intersection_y, 'ro', markersize=10, label='Intersection')
plt.legend()
plt.show()

```

google colabで描画してみると中々いい感じと思えるプロットがでてきた。

![gauss2_v1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356189/d570006a-f743-b28c-2331-f1d15d04f515.png)

ただ、ガウス分布の下の部分を塗りつぶしたいところ。通常だったらgoogleで検索するがここでもchatGPTに聞いてみる。

「can you fill under the curve of both curves and make the intersection darker」

するとこんなコードが返ってきた。

```Python
import numpy as np
import matplotlib.pyplot as plt

# Define the parameters for the two Gaussians
mu1 = 2.5
sigma1 = 1.0
mu2 = 3.5
sigma2 = 0.8

# Create the x-axis values
x = np.linspace(-1, 8, 1000)

# Calculate the y-axis values for the two Gaussians
y1 = 1/(sigma1 * np.sqrt(2 * np.pi)) * np.exp( - (x - mu1)**2 / (2 * sigma1**2) )
y2 = 1/(sigma2 * np.sqrt(2 * np.pi)) * np.exp( - (x - mu2)**2 / (2 * sigma2**2) )

# Find the intersection point of the two curves
idx = np.argwhere(np.diff(np.sign(y1 - y2))).flatten()
intersection_x = x[idx]
intersection_y = y1[idx]

# Plot the two Gaussians and their intersection point
plt.plot(x, y1, label='Gaussian 1', color='blue')
plt.plot(x, y2, label='Gaussian 2', color='green')

# Fill the area under the curves
plt.fill_between(x, 0, y1, alpha=0.2, color='blue')
plt.fill_between(x, 0, y2, alpha=0.2, color='green')

# Plot the intersection point with a darker color
plt.plot(intersection_x, intersection_y, 'ro', markersize=10, label='Intersection', color='red')

plt.legend()
plt.show()
```

実行してみると

![gauss2_v2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356189/fdc816b8-c04b-1199-ff92-f31b538443ef.png)

ちゃんとできてる!

あとはintersectionが邪魔だったり、legendは必要ないので消してあげて、ガウス分布を整えてみる。

```Python
import numpy as np
import matplotlib.pyplot as plt

# Define the parameters for the two Gaussians
mu1 = 2.5
sigma1 = 1.0
mu2 = 4.
sigma2 = 1.0

# Create the x-axis values
x = np.linspace(-1, 8, 1000)

# Calculate the y-axis values for the two Gaussians
y1 = 1/(sigma1 * np.sqrt(2 * np.pi)) * np.exp( - (x - mu1)**2 / (2 * sigma1**2) )
y2 = 1/(sigma2 * np.sqrt(2 * np.pi)) * np.exp( - (x - mu2)**2 / (2 * sigma2**2) )

# Find the intersection point of the two curves
idx = np.argwhere(np.diff(np.sign(y1 - y2))).flatten()
intersection_x = x[idx]
intersection_y = y1[idx]

# Plot the two Gaussians and their intersection point
plt.plot(x, y1, label='Gaussian 1', color='blue')
plt.plot(x, y2, label='Gaussian 2', color='blue')

# Fill the area under the curves
plt.fill_between(x, 0, y1, alpha=0.2, color='blue')
plt.fill_between(x, 0, y2, alpha=0.2, color='blue')

# Plot the intersection point with a darker color
# plt.plot(intersection_x, intersection_y, 'ro', markersize=10, label='Intersection', color='red')

# plt.legend()
plt.show()
```

![gauss2_v3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356189/decb169e-e63d-5e13-9f73-8c2f08a5da0d.png)

ほしいと思っていた図が完成しました！

ちょっとしたコードの作成にchatGPTはちょうどいいなと思いました。