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

AnyLogic仿真中如何将Histogramdata直方图数据导出至Excel

直方图数据集导出Excel实现方案

不需要放弃Histogram类型数据集,也无需改用普通DataSet存储数据,可直接通过遍历Histogram内置的统计属性、分箱数据逐行写入Excel,同时完整保留Histogram数据集在用户交互界面自动展示均值等统计指标的能力。

原生方法不兼容的原因

excelFile.writeDataSet() 方法仅支持继承自标准DataSet类的二维表结构数据集,Histogram属于统计类专用数据集,内部存储结构为「全局统计值+分箱区间+分箱频数」,和普通DataSet的行列存储逻辑不匹配,因此无法直接调用该方法写入。

具体实现代码

在仿真结束触发的逻辑中写入如下代码,可完整导出直方图的统计指标和全量分箱数据:

// 定义Excel写入的起始位置
int initRow = 1;
int initCol = 1;

// 写入全局统计值(与UI界面展示的统计指标完全一致)
excelFile.setCellValue("统计指标", initRow, initCol);
excelFile.setCellValue("数值", initRow, initCol + 1);
excelFile.setCellValue("样本总量", initRow + 1, initCol);
excelFile.setCellValue(Histogramdata.size(), initRow + 1, initCol + 1);
excelFile.setCellValue("均值", initRow + 2, initCol);
excelFile.setCellValue(Histogramdata.mean(), initRow + 2, initCol + 1);
excelFile.setCellValue("标准差", initRow + 3, initCol);
excelFile.setCellValue(Histogramdata.stdDev(), initRow + 3, initCol + 1);
excelFile.setCellValue("最小值", initRow + 4, initCol);
excelFile.setCellValue(Histogramdata.min(), initRow + 4, initCol + 1);
excelFile.setCellValue("最大值", initRow + 5, initCol);
excelFile.setCellValue(Histogramdata.max(), initRow + 5, initCol + 1);

// 偏移行位置,写入分箱明细数据表头
int binTableStartRow = initRow + 7;
excelFile.setCellValue("分箱下限", binTableStartRow, initCol);
excelFile.setCellValue("分箱上限", binTableStartRow, initCol + 1);
excelFile.setCellValue("分箱频数", binTableStartRow, initCol + 2);
excelFile.setCellValue("分箱占比", binTableStartRow, initCol + 3);

// 遍历全部分箱,逐行写入明细数据
for (int binIdx = 0; binIdx < Histogramdata.getNumberOfBins(); binIdx++) {
    int curWriteRow = binTableStartRow + 1 + binIdx;
    excelFile.setCellValue(Histogramdata.getBinLowerBound(binIdx), curWriteRow, initCol);
    excelFile.setCellValue(Histogramdata.getBinUpperBound(binIdx), curWriteRow, initCol + 1);
    excelFile.setCellValue(Histogramdata.getBinHeight(binIdx), curWriteRow, initCol + 2);
    excelFile.setCellValue(Histogramdata.getBinHeight(binIdx) / Histogramdata.size(), curWriteRow, initCol + 3);
}

// 写入完成后保存Excel文件
excelFile.writeFile();

注意事项

  • 代码中调用的mean()、getBinLowerBound()等均为Histogram数据集的原生公开方法,不需要额外做类型转换,导出的统计值和交互界面展示的数值完全一致,无数据偏差。
  • 如需导出多个直方图数据集,只需调整写入的起始行/起始列偏移量,重复上述逻辑即可,不需要修改原有Histogram数据集的配置。
  • 该方案不需要额外将数据转存为普通DataSet,避免重复占用仿真内存,也不会出现普通DataSet无法自动计算展示统计值的问题。

内容的提问来源于stack exchange,提问作者Aron T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:31:11