Histogram Data正确使用:区间大小设置问题求助
如何调整HistogramData设置以得到预期的区间百分比结果?
问题背景
在多次Parameter Variation运行后,将结果保存到Histogram Data对象中,但输出的区间范围和百分比不符合预期,希望明确问题原因并找到解决方法。
HistogramData设置
Number of intervals: 7 Value range: Automatically detected Initial Interval Size: 10
结果打印代码
//if final replication, write Histogram Data into Excel if(getCurrentReplication() == lastReplication){ double intervalWidth = histogramData.getIntervalWidth(); int intervalQty = histogramData.getNumberOfIntervals(); for(int i = 0; i < intervalQty; i++){ traceln(intervalWidth*i + " " + histogramData.getPDF(i)); excelRecords.setCellValue(String.valueOf(intervalWidth*i) + " - " + String.valueOf(intervalWidth*(i+1)), 1, rowIndex, columnIndex); excelRecords.setCellValue(histogramData.getPDF(i), 1, rowIndex, columnIndex+1); rowIndex++; } }
预期结果
10 - 80% 20 - 10% 30 - 5% 40 - 2% 50... 60...
实际输出结果
0.0 0.0 10.0 0.0 20.0 0.0 30.0 0.998782775272379 40.0 0.0011174522089635631 50.0 9.9772518657461E-5 60.0 0.0
调整初始区间大小为0.1后的结果
0.0 0.9974651710510558 4.0 0.001117719851502934 8.0 9.181270208774101E-4 12.0 2.3951139675062872E-4 16.0 1.5967426450041916E-4 20.0 9.979641531276197E-5 24.0 0.0
问题分析与解决方法
核心误解
你对HistogramData的自动区间逻辑理解有误:
- 当开启Automatically detected值范围时,
Initial Interval Size仅作为初始参考,系统会根据实际数据分布自动调整区间宽度和范围,最终区间不一定匹配你的初始设置。比如初始设0.1时,系统自动将区间宽度调整为4,就是为了适配数据的集中分布。 - 自动检测会从数据的最小值开始生成区间,所以第一个区间是0-10(宽度10时),而非你预期的10-20。
解决步骤
固定区间范围与宽度:
关闭自动区间检测,手动设置:- Value range最小值为10,最大值为80(对应7个10宽度的区间:10-20、20-30...70-80)
- Interval Size设为10
这样系统会严格按照你指定的区间生成直方图。
转换PDF为百分比格式:
getPDF(i)返回的是0-1的概率值,需要乘以100并格式化百分比,修改代码中的单元格赋值逻辑:excelRecords.setCellValue(String.format("%.1f%%", histogramData.getPDF(i)*100), 1, rowIndex, columnIndex+1);处理边界数据:
如果数据中有小于10或大于80的值,会被归入溢出/下溢区间,需要额外处理:- 下溢数据量:
histogramData.getUnderflowCount() - 溢出数据量:
histogramData.getOverflowCount()
可根据需求将这些数据的百分比添加到结果中。
- 下溢数据量:
数据分布说明:
从实际结果看,你的数据绝大多数集中在30左右的区间,即使调整了区间设置,也可能出现多数区间百分比为0的情况,这是数据本身的分布特性,并非HistogramData的功能问题。
内容的提问来源于stack exchange,提问作者Shingston
相关产品推荐
相关产品推荐

