boxPlotData method

List<Map<String, dynamic>> boxPlotData({
  1. int groups = 5,
  2. List<String>? groupNames,
  3. int samplesPerGroup = 100,
})

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,
    };
  });
}