Skip to content

Commit 8de50dc

Browse files
committed
add indexToPoints to groupby transforms
1 parent 044ea96 commit 8de50dc

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/transforms/groupby.js

+13
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
var Lib = require('../lib');
1212
var PlotSchema = require('../plot_api/plot_schema');
1313
var Plots = require('../plots/plots');
14+
var pointsAccessorFunction = require('./helpers').pointsAccessorFunction;
1415

1516
exports.moduleType = 'transform';
1617

@@ -161,6 +162,7 @@ function transformOne(trace, state) {
161162

162163
var opts = state.transform;
163164
var groups = trace.transforms[state.transformIndex].groups;
165+
var originalPointsAccessor = pointsAccessorFunction(trace.transforms, opts);
164166

165167
if(!(Array.isArray(groups)) || groups.length === 0) {
166168
return [trace];
@@ -184,14 +186,17 @@ function transformOne(trace, state) {
184186

185187
// An index to map group name --> expanded trace index
186188
var indexLookup = {};
189+
var indexCnts = {};
187190

188191
for(i = 0; i < groupNames.length; i++) {
189192
groupName = groupNames[i];
190193
indexLookup[groupName] = i;
194+
indexCnts[groupName] = 0;
191195

192196
// Start with a deep extend that just copies array references.
193197
newTrace = newData[i] = Lib.extendDeepNoArrays({}, trace);
194198
newTrace._group = groupName;
199+
newTrace.transforms[state.transformIndex]._indexToPoints = {};
195200

196201
var suppliedName = null;
197202
if(groupNameObj) {
@@ -246,6 +251,14 @@ function transformOne(trace, state) {
246251
}
247252
}
248253

254+
for(j = 0; j < len; j++) {
255+
newTrace = newData[indexLookup[groups[j]]];
256+
257+
var indexToPoints = newTrace.transforms[state.transformIndex]._indexToPoints;
258+
indexToPoints[indexCnts[groups[j]]] = originalPointsAccessor(j);
259+
indexCnts[groups[j]]++;
260+
}
261+
249262
for(i = 0; i < groupNames.length; i++) {
250263
groupName = groupNames[i];
251264
newTrace = newData[i];

test/jasmine/tests/transform_groupby_test.js

+3
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@ describe('groupby', function() {
5757
expect(gd._fullData.length).toEqual(2);
5858
expect(gd._fullData[0].x).toEqual([1, -1, 0, 3]);
5959
expect(gd._fullData[0].y).toEqual([1, 2, 1, 1]);
60+
expect(gd._fullData[0].transforms[0]._indexToPoints).toEqual({0: [0], 1: [1], 2: [3], 3: [6]});
6061
expect(gd._fullData[1].x).toEqual([-2, 1, 2]);
6162
expect(gd._fullData[1].y).toEqual([3, 2, 3]);
63+
expect(gd._fullData[1].transforms[0]._indexToPoints).toEqual({0: [2], 1: [4], 2: [5]});
6264

6365
assertDims([4, 3]);
6466

@@ -460,6 +462,7 @@ describe('groupby', function() {
460462
expect(gd._fullData[0].y).toEqual([0, 1, 3, 6]);
461463
expect(gd._fullData[0].marker.line.width).toEqual([4, 2, 2, 3]);
462464

465+
463466
expect(gd._fullData[1].ids).toEqual(['r', 'y', 'u']);
464467
expect(gd._fullData[1].x).toEqual([-2, 1, 2]);
465468
expect(gd._fullData[1].y).toEqual([2, 5, 4]);

0 commit comments

Comments
 (0)