boxPlotData method
Generates box plot data.
Implementation
List<Map<String, dynamic>> boxPlotData({
int groups = 5,
List<String>? groupNames,
int samplesPerGroup = 100,
}) {
return List.generate(groups, (i) {
final samples = _random.normalList(
samplesPerGroup, _random.uniform(30, 70), _random.uniform(5, 15));
samples.sort();
final q1Index = (samplesPerGroup * 0.25).floor();
final medianIndex = (samplesPerGroup * 0.5).floor();
final q3Index = (samplesPerGroup * 0.75).floor();
final iqr = samples[q3Index] - samples[q1Index];
final lowerFence = samples[q1Index] - 1.5 * iqr;
final upperFence = samples[q3Index] + 1.5 * iqr;
final outliers =
samples.where((v) => v < lowerFence || v > upperFence).toList();
return {
'group': groupNames?[i] ?? 'Group ${i + 1}',
'min': samples.where((v) => v >= lowerFence).first,
'q1': samples[q1Index],
'median': samples[medianIndex],
'q3': samples[q3Index],
'max': samples.where((v) => v <= upperFence).last,
'outliers': outliers,
'samples': samples,
};
});
}