generate method
Generates stacked series from the given data.
Implementation
List<StackSeries<T>> generate(List<T> data) {
if (data.isEmpty || keys.isEmpty) return [];
// Order keys
final orderedKeys = _orderKeys(data);
// Calculate raw stacks
final series = <StackSeries<T>>[];
for (final key in orderedKeys) {
final points = <StackPoint<T>>[];
for (int i = 0; i < data.length; i++) {
final v = value(data[i], key);
points.add(StackPoint<T>(
data: data[i],
index: i,
value: v,
y0: 0,
y1: v,
));
}
series.add(StackSeries<T>(
key: key,
points: points,
));
}
// Stack the values
for (int i = 0; i < data.length; i++) {
double y0 = 0;
for (final s in series) {
final point = s.points[i];
final v = point.value;
s.points[i] = StackPoint<T>(
data: point.data,
index: point.index,
value: v,
y0: y0,
y1: y0 + v,
);
y0 += v;
}
}
// Apply offset
_applyOffset(series, data.length);
return series;
}