fromPoints static method

ChartViewport fromPoints(
  1. Iterable<double> xs,
  2. Iterable<double> ys, {
  3. double padding = 0.05,
})

Implementation

static ChartViewport fromPoints(
  Iterable<double> xs,
  Iterable<double> ys, {
  double padding = 0.05,
}) {
  var minX = double.infinity;
  var maxX = double.negativeInfinity;
  var minY = double.infinity;
  var maxY = double.negativeInfinity;

  for (final x in xs) {
    if (x < minX) minX = x;
    if (x > maxX) maxX = x;
  }
  for (final y in ys) {
    if (y < minY) minY = y;
    if (y > maxY) maxY = y;
  }

  if (minX == double.infinity) {
    return const ChartViewport(minX: 0, maxX: 1, minY: 0, maxY: 1);
  }

  var xSpan = maxX - minX;
  var ySpan = maxY - minY;
  if (xSpan <= 0) {
    final center = minX;
    xSpan = 1;
    minX = center - xSpan / 2;
    maxX = center + xSpan / 2;
  }
  if (ySpan <= 0 || !ySpan.isFinite) {
    final center = minY.isFinite ? minY : 0.0;
    ySpan = center.abs() > 1e-9 ? center.abs() : 1;
    minY = center - ySpan / 2;
    maxY = center + ySpan / 2;
  }

  final xPad = xSpan * padding;
  final yPad = ySpan * padding;
  return ChartViewport(
    minX: minX - xPad,
    maxX: maxX + xPad,
    minY: minY - yPad,
    maxY: maxY + yPad,
  );
}