GrainPeak 是一款基于 Python Tkinter 的粒度分析分峰软件,用于读取粒度分布数据、进行多峰拟合、对比多个样品曲线,并导出拟合结果。
- 支持导入
.txt、.csv、.dat等两列粒度数据文件 - 支持同时加载最多 6 个文件进行对比显示
- 支持正常坐标、Log10 坐标、Ln 坐标三种横坐标显示模式
- 支持三种分峰拟合模型:
- 伪沃伊特函数(Pseudo-Voigt Profile)
- 偏斜高斯混合模型(Skew-Normal GMM)
- 标准高斯混合模型(Gaussian Mixture)
- 支持自动峰位置初始化和手动设置峰数量
- 支持四峰固定初值:
-1.04、0.15、1.05、1.90 - 支持峰位置、峰高、峰宽、面积、拟合参数和物理意义展示
- 支持对选中文件拟合,也支持对所有可见文件批量拟合
- 支持导出原始数据、拟合摘要、峰参数和拟合曲线到 CSV
- 内置样例文件自动加载:
粒度分析1.txt、粒度分析2.txt
src/main.py # 桌面启动入口
src/app.py # GUI 应用
src/fit_engine.py # 拟合引擎
webapp.py # Web 启动入口
web/ # 浏览器界面
data/examples/ # 两份粒度示例数据
scripts/ # 辅助脚本
tests/ # 自动化测试
requirements.txt # Python 依赖
GrainPeakAnalyzerDir.spec # Windows 打包配置
- Python 3.10 或更高版本
- Windows、macOS 或 Linux 桌面环境
依赖库:
- NumPy
- SciPy
- Matplotlib
- Tkinter(通常随 Python 自带)
pip install -r requirements.txt如果当前 Python 环境缺少 Tkinter,请根据系统安装对应的 Tkinter 包。
python src/main.pypython webapp.py浏览器访问 http://127.0.0.1:8770。Web 版复用与桌面版相同的 SciPy 拟合引擎,提供数据上传、三种坐标模式、三种峰形模型、拟合曲线、R²/RMSE、峰参数与 CSV 导出。上传数据只用于当前请求,不在服务端落盘。
从仓库根目录启动后,程序会尝试自动加载 data/examples/ 下的 粒度分析1.txt 和 粒度分析2.txt 作为示例数据。
输入文件需要包含至少两列数值:
粒径 强度
0.01 0.12
0.02 0.18
0.05 0.31
说明:
- 第一列为粒径或横坐标数据
- 第二列为强度、体积分数或分布值
- 支持空格、逗号、分号分隔
- 空行和以
#开头的注释行会被忽略 - 数据会按第一列自动排序
- 点击“添加数据文件”导入粒度分析数据。
- 在“横坐标模式”中选择正常、Log10 或 Ln 显示方式。
- 在“分峰参数”中选择拟合模型。
- 设置峰数量,或勾选“四峰固定初值”。
- 点击“拟合选中文件”或“拟合所有可见文件”。
- 在下方峰参数表中查看峰位置、峰高、峰宽、面积和物理意义。
- 点击“导出对比结果 CSV”保存结果。
适合同时包含高斯型和洛伦兹型特征的峰形,可用于更灵活地描述粒度分布峰。
适合非对称峰形,可用于描述偏斜明显的粒度分布。
适合常规多峰粒度分布分析,参数更少、结果更直观。
程序内置四个参考峰位置,并可根据拟合峰中心自动匹配物理意义:
| 参考峰位置 | 物理意义 |
|---|---|
| -1.04 | 单管/极细管束相,主导高斯特征 |
| 0.15 | 小尺寸亚微米软团聚 |
| 1.05 | 中等尺寸管束网络,处于半分散状态的架凝结构 |
| 1.90 | 大尺寸微米级硬团聚,主导洛伦兹地尾特征 |
建议在 log 坐标数据或 Log10 显示模式下使用四峰固定初值和物理意义标注。
导出的 CSV 文件包含以下内容:
RAW_DATA:所有加载文件的原始数据FIT_SUMMARY:每个已拟合文件的模型、R² 和 RMSEPEAK_PARAMS:峰位置、峰高、峰宽、面积、模型附加参数和物理意义FIT_CURVES:总拟合曲线和各分峰曲线数据
项目保留了 PyInstaller 目录版打包配置,可使用以下命令打包:
pyinstaller GrainPeakAnalyzerDir.spec打包结果会生成在 dist/GrainPeakAnalyzerDir 目录中。
- Log10 和 Ln 模式只会使用粒径大于 0 的数据点。
- 数据点过少或峰数量设置过高可能导致拟合失败。
- 多峰拟合结果受初始峰位置、数据质量和模型选择影响,建议结合图形和 R²、RMSE 判断结果可靠性。