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

如何使用Python导入Excel数据绘制直方图并完成指数函数拟合

实现步骤

1. 依赖库安装

需要用到4个核心库,执行以下命令安装:
pip install pandas matplotlib scipy openpyxl

  • pandas:读取Excel文件数据
  • matplotlib:绘制直方图与拟合曲线
  • scipy:实现指数函数拟合逻辑
  • openpyxl:支持读取.xlsx格式的Excel文件,若你的文件是.xls格式,将openpyxl替换为xlrd即可

2. 完整实现代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 1. 读取Excel数据,替换为你自己的文件路径、工作表名、数据列名
df = pd.read_excel("your_data.xlsx", sheet_name="Sheet1")
# 提取待分析的数值列,同时过滤空值
target_data = df["your_column_name"].dropna()

# 2. 定义要拟合的指数函数形式,可根据实际分布调整参数结构
def exponential_func(x, a, b, c):
    return a * np.exp(-b * x) + c

# 3. 绘制直方图同时获取分组统计数据用于拟合
# bins参数控制直方图分组数量,可自行调整
counts, bin_edges, _ = plt.hist(target_data, bins=30, alpha=0.6, label="原始数据分布")
# 计算每个分组的中点作为拟合用的x轴数据
bin_centers = (bin_edges[:-1] + bin_edges[1:]) / 2

# 4. 执行指数拟合
# p0为初始参数猜测值,可根据数据量级调整,避免拟合不收敛
popt, _ = curve_fit(exponential_func, bin_centers, counts, p0=[max(counts), 0.1, 0])
# 生成拟合曲线的连续坐标
x_fit = np.linspace(min(bin_centers), max(bin_centers), 1000)
y_fit = exponential_func(x_fit, *popt)

# 5. 配置图像展示
plt.plot(x_fit, y_fit, "r-", linewidth=2, label=f"拟合曲线:y={popt[0]:.2f}*e^(-{popt[1]:.2f}x)+{popt[2]:.2f}")
plt.xlabel("数值区间")
plt.ylabel("频数")
plt.legend()
plt.show()

3. 常见调整说明

  • 若不需要指数函数的常数偏移项,可删除参数c,函数修改为return a * np.exp(-b * x),同时p0对应调整为两个初始值即可
  • 如果拟合时报错不收敛,优先调整p0的初始值,尽量贴合你数据的实际幅值、衰减速度量级
  • 若需要将直方图归一化为密度分布,将plt.hist的density参数设置为True即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:06:04