stackOffsetDiverging function Stack offsets Stacks

void stackOffsetDiverging(
  1. List<List<List<num>>> series,
  2. List<int> order
)

Positive values are stacked above zero, negative values are stacked below zero, and zero values are stacked at zero.

final stack = Stack(…)..offset = stackOffsetDiverging;

Implementation

void stackOffsetDiverging(List<List<List<num>>> series, List<int> order) {
  int i, n;
  if (!((n = series.length) > 0)) return;
  num dy, yp, yn;
  List<num> d;
  for (var j = 0, m = series[order[0]].length; j < m; ++j) {
    yp = yn = 0;
    for (i = 0; i < n; ++i) {
      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {
        d[0] = yp;
        d[1] = yp += dy;
      } else if (dy < 0) {
        d[1] = yn;
        d[0] = yn += dy;
      } else {
        d[0] = 0;
        d[1] = dy;
      }
    }
  }
}