fromData static method
Implementation
static SimpleBoxPlotSummary? fromData(SimpleBoxPlotData data) {
final hasSummary =
data.min != null &&
data.q1 != null &&
data.median != null &&
data.q3 != null &&
data.max != null;
if (hasSummary) {
final values = [data.min!, data.q1!, data.median!, data.q3!, data.max!];
if (values.any((value) => !value.isFinite)) return null;
values.sort();
return SimpleBoxPlotSummary(
min: values[0],
q1: values[1],
median: values[2],
q3: values[3],
max: values[4],
mean: data.mean?.isFinite == true ? data.mean : null,
outliers: data.outliers.where((value) => value.isFinite).toList(),
);
}
final values = data.values.where((value) => value.isFinite).toList()
..sort();
if (values.isEmpty) return null;
final q1 = _quantile(values, 0.25);
final median = _quantile(values, 0.5);
final q3 = _quantile(values, 0.75);
final iqr = q3 - q1;
final lowFence = q1 - 1.5 * iqr;
final highFence = q3 + 1.5 * iqr;
final inliers = values
.where((value) => value >= lowFence && value <= highFence)
.toList();
final outliers = values
.where((value) => value < lowFence || value > highFence)
.toList();
final mean = values.fold(0.0, (sum, value) => sum + value) / values.length;
return SimpleBoxPlotSummary(
min: inliers.isEmpty ? values.first : inliers.first,
q1: q1,
median: median,
q3: q3,
max: inliers.isEmpty ? values.last : inliers.last,
mean: mean,
outliers: outliers,
);
}