modify method
AttributesGroups
modify(
- AttributesGroups groups,
- Map<
String, ScaleConv< scales,dynamic, num> > - AlgForm form,
- CoordConv coord,
- Offset origin,
override
Modifies the position of mark items.
The aesthetic encodes are in the groups
.
Note that the modifier should be functional, which means to return a new groups list as result, not to change the input groups.
Implementation
@override
AttributesGroups modify(
AttributesGroups groups,
Map<String, ScaleConv<dynamic, num>> scales,
AlgForm form,
CoordConv coord,
Offset origin) {
final xField = form.first[0];
final band = (scales[xField] as DiscreteScaleConv).band;
final ratio = this.ratio ?? 1 / (groups.length);
final symmetric = this.symmetric ?? true;
final bias = ratio * band;
// If symmetric, negtively shifts half of the total bias.
var accumulated = symmetric ? -bias * (groups.length - 1) / 2 : 0.0;
final AttributesGroups rst = [];
for (var group in groups) {
final groupRst = <Attributes>[];
for (var attributes in group) {
final oldPosition = attributes.position;
groupRst.add(attributes.withPosition(oldPosition
.map(
(point) => Offset(point.dx + accumulated, point.dy),
)
.toList()));
}
rst.add(groupRst);
accumulated += bias;
}
return rst;
}