如何将标准正态分布曲线叠加到数据直方图上作拟合对比?
叠加正态分布曲线到样本直方图的实现
要实现将标准正态分布曲线叠加到样本直方图上,你需要调整直方图的统计量类型,并确保所有绘图操作在同一个Matplotlib会话中执行。以下是完整的实现代码:
import matplotlib.pyplot as plt import numpy as np import scipy.stats as stats import math import seaborn as sns # 定义正态分布参数 mu = 0 variance = 1 sigma = math.sqrt(variance) # 生成样本数据 value = np.random.normal(loc=mu, scale=sigma, size=1000) # 绘制样本直方图,设置stat="density"使y轴为概率密度 sns.histplot(value, stat="density", alpha=0.6, label="样本直方图") # 生成正态分布曲线的x轴数据 x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100) # 绘制正态分布曲线 plt.plot(x, stats.norm.pdf(x, mu, sigma), color="red", linewidth=2, label="标准正态分布曲线") # 添加图例、标题和坐标轴标签 plt.legend() plt.title("样本直方图与标准正态分布曲线对比") plt.xlabel("数值") plt.ylabel("概率密度") # 显示图形 plt.show()
关键说明:
stat="density":这个参数是核心,它将直方图的y轴从样本计数转换为概率密度,确保直方图的高度和正态分布的概率密度函数(PDF)取值范围匹配,两者能正确叠加。- 移除多余的
plt.show():原第一段代码中的plt.show()会终止当前绘图会话,导致后续的直方图在新窗口绘制。将所有绘图操作放在同一个会话中,就能实现叠加效果。 - 可视化优化:添加
alpha参数让直方图半透明,方便观察曲线;增加图例、标题和坐标轴标签提升可读性。
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

