histogram static method
Compute histogram bins for values into binCount equal-width buckets.
Returns list of (binStart, binEnd, count) records.
Implementation
static List<({double start, double end, int count})> histogram(
List<double> values, {
int binCount = 10,
double? forcedMin,
double? forcedMax,
}) {
final count = _normalizeGeneratedCount(binCount);
if (count <= 0) return const [];
final visibleValues = _finiteValues(values);
if (visibleValues.isEmpty) return const [];
final dataMin = visibleValues.reduce((a, b) => a < b ? a : b);
final dataMax = visibleValues.reduce((a, b) => a > b ? a : b);
final rawMin = forcedMin != null && forcedMin.isFinite
? forcedMin
: dataMin;
final rawMax = forcedMax != null && forcedMax.isFinite
? forcedMax
: dataMax;
double min = math.min(rawMin, rawMax);
double max = math.max(rawMin, rawMax);
if (min == max) {
max = min + 1;
}
final double width = (max - min) / count;
if (!width.isFinite || width <= 0) return const [];
final counts = List<int>.filled(count, 0);
for (final v in visibleValues) {
int bin = ((v - min) / width).floor();
if (bin >= count) bin = count - 1;
if (bin < 0) bin = 0;
counts[bin]++;
}
return List.generate(
count,
(i) => (
start: min + i * width,
end: min + (i + 1) * width,
count: counts[i],
),
);
}