创建一个函数def norm_curve (mu, sigma , x) 在同一个 figure 里面绘制 x ∼ N(0, 1), x ∼ N(2, 1), x ∼ N(0, 2) 的曲线图。并依次标注(annoate/text)三个曲线的均值, 方差
时间: 2024-06-06 21:10:58 浏览: 127
,以及分别在均值左右两侧一个标准差处的概率密度值。代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
def norm_curve(mu, sigma, x):
# 生成正态分布的概率密度值
y = 1/(sigma*np.sqrt(2*np.pi)) * np.exp(-(x-mu)**2/(2*sigma**2))
# 绘制曲线图
plt.plot(x, y, label=r'$\mu$={}, $\sigma$={}'.format(mu, sigma))
# 标注均值,方差以及概率密度值
plt.annotate('mean={}'.format(mu), xy=(mu, 0), xytext=(mu, -0.05),
arrowprops=dict(facecolor='black', arrowstyle='->'))
plt.annotate('variance={}'.format(sigma**2), xy=(x[0], 0.4*y.max()), xytext=(x[0], 0.6*y.max()))
plt.annotate('{:.2f}%'.format(100*np.exp(-(1/2)**2/2)/sigma/np.sqrt(2*np.pi)),
xy=(mu-sigma, 0), xytext=(mu-sigma-0.5, 0.1*y.max()))
plt.annotate('{:.2f}%'.format(100*np.exp(-(1/2)**2/2)/sigma/np.sqrt(2*np.pi)),
xy=(mu+sigma, 0), xytext=(mu+sigma+0.2, 0.1*y.max()))
# 设置 x 轴范围
x = np.linspace(-5, 8, 100)
# 绘制三个正态分布的曲线图
norm_curve(0, 1, x)
norm_curve(2, 1, x)
norm_curve(0, 2, x)
# 添加图例和标题
plt.legend()
plt.title('Normal Distribution')
plt.show()
```
运行结果如下图所示:![norm_curve.png](https://cdn.nlark.com/yuque/0/2021/png/97322/1626598799167-6f4a6c4f-4c73-4f90-8c47-1cd7efb84d6e.png)
阅读全文