如何使用Python绘制单变量(univariate)数据的正态分布曲线
Python 针对实际单变量数据绘制对应正态分布曲线的实现方法
核心逻辑是先基于你的实际样本计算均值和标准差,以这两个值为参数生成匹配的正态分布概率密度曲线即可,你可以搭配原始数据的归一化直方图同步展示,直观查看拟合效果。
完整可运行代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm # 1. 加载你提供的样本数据 data_dict = {'RPM': {493: 7.2, 494: 7.2, 495: 7.2, 496: 7.2, 567: 8.4, 568: 8.4, 569: 8.4, 570: 8.4, 767: 18.0, 768: 18.0, 781: 23.4, 782: 23.4, 783: 23.4, 784: 23.4, 785: 23.4, 806: 23.4, 807: 23.4, 808: 23.4, 809: 23.4, 810: 23.4, 811: 23.4, 812: 23.4, 951: 23.4, 952: 23.4, 953: 23.4, 954: 11.4, 955: 11.4, 957: 11.4, 981: 19.2, 982: 23.4, 983: 23.4, 984: 23.4, 1062: 23.4, 1063: 23.4, 1064: 23.4, 1065: 23.4, 1066: 23.4, 1068: 23.4, 1069: 23.4, 1070: 23.4, 1071: 23.4, 1072: 23.4, 1073: 23.4, 1074: 23.4, 1075: 23.4, 1076: 23.4, 1077: 23.4, 1079: 23.4, 1119: 23.4, 1120: 23.4, 1121: 23.4, 1122: 23.4, 1123: 23.4, 1125: 23.4, 1126: 23.4, 1127: 23.4, 1128: 23.4, 1129: 23.4, 1130: 23.4, 1132: 23.4, 1133: 23.4, 1134: 23.4, 1135: 23.4, 1136: 23.4, 1137: 23.4, 1159: 23.4, 1162: 23.4, 1164: 23.4, 1165: 23.4, 1166: 23.4, 1167: 23.4, 1168: 23.4, 1169: 23.4, 1171: 23.4, 1172: 23.4, 1173: 23.4, 1174: 23.4}} rpm_data = pd.Series(data_dict['RPM']).values # 2. 计算样本的均值和标准差,作为正态分布的输入参数 mu = np.mean(rpm_data) sigma = np.std(rpm_data, ddof=1) # ddof=1计算样本标准差,对应无偏估计 # 3. 生成x轴取值范围,覆盖数据的最小到最大值,再适当延伸边界 x = np.linspace(rpm_data.min() - 2, rpm_data.max() + 2, 1000) # 计算对应x的正态分布概率密度值 p = norm.pdf(x, loc=mu, scale=sigma) # 4. 绘制图形 plt.figure(figsize=(10,6)) # 先绘制原始数据的归一化直方图 plt.hist(rpm_data, bins=10, density=True, alpha=0.6, color='skyblue', label='原始RPM数据分布') # 绘制拟合的正态分布曲线 plt.plot(x, p, 'k', linewidth=2, label=f'拟合正态分布 (μ={mu:.2f}, σ={sigma:.2f})') plt.xlabel('RPM数值') plt.ylabel('概率密度') plt.legend() plt.show()
代码说明
- 如果你不需要展示直方图,只保留
plt.plot(x, p, 'k', linewidth=2)部分即可输出纯正态分布曲线 - 计算标准差时
ddof=1是样本标准差的标准计算方式,如果你的数据是全量总体数据,可去掉该参数使用总体标准差 - 可以根据你的需求调整直方图的
bins参数、颜色、透明度等样式参数
内容的提问来源于stack exchange,提问作者johnson
相关产品推荐
相关产品推荐

