You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python读取Excel表格绘制直方图验证中心极限定理?

代码问题分析

你当前的代码存在两个核心问题:

  • 直接向plt.hist()传入DataFrame对象时,matplotlib会按列拆分数据,为每一列单独生成一个直方图序列,最终输出的是多组堆叠/并列的柱状图,无法呈现所有数据的整体分布,不符合验证中心极限定理的统计要求。
  • 所有直方图直接绘制在同一块画布上,互相重叠无法区分,既看不到原始指数分布的形态,也无法对比样本均值分布的正态近似效果。
是否需要格式化为单列?

需要。你的两份原始Excel数据是多列存储的指数分布随机数,要验证中心极限定理,首先需要把所有原始值、所有样本均值分别合并为一维的单列序列,才能绘制对应整体分布的直方图。

最高效的处理方式

直接调用pandas DataFrame的values.flatten()方法,无需循环即可将整个表的所有数值快速展平为一维numpy数组,时间复杂度为O(n),是目前效率最高的实现方式。

修正后的参考代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 导入数据
df1 = pd.read_excel(r'C:\Users\Henry\Desktop\n10.xlsx')
df2 = pd.read_excel(r'C:\Users\Henry\Desktop\n30.xlsx')
df1avg = pd.read_excel(r'C:\Users\Henry\Desktop\n10avg.xlsx')
df2avg = pd.read_excel(r'C:\Users\Henry\Desktop\n30avg.xlsx')

# 展平为一维数组
data_n10 = df1.values.flatten()
avg_n10 = df1avg.values.flatten()
data_n30 = df2.values.flatten()
avg_n30 = df2avg.values.flatten()

# 分四子图绘制,方便对比
plt.rcParams['font.sans-serif'] = ['SimHei'] # 不需要中文显示可删除该行
fig, axes = plt.subplots(2,2, figsize=(12,8))

# 子图1:n=10原始指数分布
axes[0,0].hist(data_n10, bins=34)
axes[0,0].set_title('n=10原始指数分布')

# 子图2:n=10样本均值分布
axes[0,1].hist(avg_n10, bins=11)
axes[0,1].set_title('n=10样本均值分布')

# 子图3:n=30原始指数分布
axes[1,0].hist(data_n30, bins=63)
axes[1,0].set_title('n=30原始指数分布')

# 子图4:n=30样本均值分布
axes[1,1].hist(avg_n30, bins=11)
axes[1,1].set_title('n=30样本均值分布')

plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者Hal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:36:03