normalize method

double normalize(
  1. double value,
  2. double dataMin,
  3. double dataMax
)

Convert a raw data value to 0..1 normalised.

For AxisScaleType.log, values ≤ 0 are clamped to a tiny positive.

Implementation

double normalize(double value, double dataMin, double dataMax) {
  final lo = _finite(min ?? dataMin, 0);
  final hi = _finite(max ?? dataMax, lo);
  if (!value.isFinite) return 0.5;
  if (hi == lo) return 0.5;

  switch (scaleType) {
    case AxisScaleType.linear:
    case AxisScaleType.time:
    case AxisScaleType.percent:
      return _unitInterval((value - lo) / (hi - lo));

    case AxisScaleType.log:
      final safeBase = _safeLogBase(logBase);
      final logLo =
          math.log(lo.clamp(1e-10, double.infinity)) / math.log(safeBase);
      final logHi =
          math.log(hi.clamp(1e-10, double.infinity)) / math.log(safeBase);
      final logV =
          math.log(value.clamp(1e-10, double.infinity)) / math.log(safeBase);
      if (logHi == logLo) return 0.5;
      return _unitInterval((logV - logLo) / (logHi - logLo));

    case AxisScaleType.category:
      final cats = categories ?? const [];
      if (cats.isEmpty) return 0;
      if (cats.length == 1) return 0.5;
      final idx = value.round().clamp(0, cats.length - 1);
      return idx / (cats.length - 1);
  }
}