Skip to content

Commit 76bba08

Browse files
committed
fix scatterpolargl radialaxis expansion + add autorange tests
1 parent 82c3d78 commit 76bba08

File tree

2 files changed

+124
-3
lines changed

2 files changed

+124
-3
lines changed

src/traces/scatterpolargl/index.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,12 @@ function calc(gd, trace) {
4646

4747
// For graphs with very large number of points and array marker.size,
4848
// use average marker size instead to speed things up.
49-
var ppad = len < TOO_MANY_POINTS ?
50-
calcMarkerSize(trace, len) :
51-
2 * (opts.marker.sizeAvg || Math.max(opts.marker.size, 3));
49+
var ppad;
50+
if(len < TOO_MANY_POINTS) {
51+
ppad = calcMarkerSize(trace, len);
52+
} else if(opts.marker) {
53+
ppad = 2 * (opts.marker.sizeAvg || Math.max(opts.marker.size, 3));
54+
}
5255
trace._extremes.x = Axes.findExtremes(radialAxis, rArray, {ppad: ppad});
5356

5457
return [{x: false, y: false, t: stash, trace: trace}];

test/jasmine/tests/scatterpolargl_test.js

+118
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var Plotly = require('@lib');
22
var Lib = require('@src/lib');
3+
var ScatterPolarGl = require('@src/traces/scatterpolargl');
34

45
var d3 = require('d3');
56
var createGraphDiv = require('../assets/create_graph_div');
@@ -251,3 +252,120 @@ describe('Test scatterpolargl interactions:', function() {
251252
.then(done);
252253
});
253254
});
255+
256+
describe('Test scatterpolargl autorange:', function() {
257+
var gd;
258+
259+
beforeEach(function() {
260+
gd = createGraphDiv();
261+
});
262+
263+
afterEach(function() {
264+
Plotly.purge(gd);
265+
destroyGraphDiv();
266+
});
267+
268+
describe('should return the same value as SVG scatter for ~small~ data', function() {
269+
var specs = [
270+
{name: 'markers', fig: require('@mocks/polar_scatter.json')},
271+
{name: 'lines', fig: require('@mocks/polar_line.json')},
272+
];
273+
274+
specs.forEach(function(s) {
275+
it('@gl - case ' + s.name, function(done) {
276+
var svgRange;
277+
278+
// ensure the mocks have auto-range turned on
279+
var svgFig = Lib.extendDeep({}, s.fig);
280+
Lib.extendDeep(svgFig.layout.polar, {radialaxis: {autorange: true}});
281+
282+
var glFig = Lib.extendDeep({}, svgFig);
283+
glFig.data.forEach(function(t) { t.type = 'scatterpolargl'; });
284+
285+
Plotly.newPlot(gd, svgFig).then(function() {
286+
svgRange = gd._fullLayout.polar.radialaxis.range;
287+
})
288+
.then(function() {
289+
return Plotly.newPlot(gd, glFig);
290+
})
291+
.then(function() {
292+
expect(gd._fullLayout.polar.radialaxis.range)
293+
.toBeCloseToArray(svgRange, 'gl radial range');
294+
})
295+
.catch(failTest)
296+
.then(done);
297+
});
298+
});
299+
});
300+
301+
describe('should return the approximative values for ~big~ data', function() {
302+
var cnt;
303+
304+
beforeEach(function() {
305+
// to avoid expansive draw calls (which could be problematic on CI)
306+
cnt = 0;
307+
spyOn(ScatterPolarGl, 'plot').and.callFake(function() {
308+
cnt++;
309+
});
310+
});
311+
312+
// threshold for 'fast' axis expansion routine
313+
var N = 1e5;
314+
var r = new Array(N);
315+
var ms = new Array(N);
316+
317+
Lib.seedPseudoRandom();
318+
319+
for(var i = 0; i < N; i++) {
320+
r[i] = Lib.pseudoRandom();
321+
ms[i] = 20 * Lib.pseudoRandom() + 20;
322+
}
323+
324+
it('@gl - case scalar marker.size', function(done) {
325+
Plotly.newPlot(gd, [{
326+
type: 'scatterpolargl',
327+
mode: 'markers',
328+
r: r,
329+
marker: {size: 10}
330+
}])
331+
.then(function() {
332+
expect(gd._fullLayout.polar.radialaxis.range)
333+
.toBeCloseToArray([0, 1.0799], 2, 'radial range');
334+
expect(cnt).toBe(1, '# of plot call');
335+
})
336+
.catch(failTest)
337+
.then(done);
338+
});
339+
340+
it('@gl - case array marker.size', function(done) {
341+
Plotly.newPlot(gd, [{
342+
type: 'scatterpolargl',
343+
mode: 'markers',
344+
r: r,
345+
marker: ms
346+
}])
347+
.then(function() {
348+
expect(gd._fullLayout.polar.radialaxis.range)
349+
.toBeCloseToArray([0, 1.0465], 2, 'radial range');
350+
expect(cnt).toBe(1, '# of plot call');
351+
})
352+
.catch(failTest)
353+
.then(done);
354+
});
355+
356+
it('@gl - case mode:lines', function(done) {
357+
Plotly.newPlot(gd, [{
358+
type: 'scatterpolargl',
359+
mode: 'lines',
360+
r: r,
361+
}])
362+
.then(function() {
363+
expect(gd._fullLayout.polar.radialaxis.range)
364+
.toBeCloseToArray([0, 0.9999], 2, 'radial range');
365+
expect(cnt).toBe(1, '# of plot call');
366+
})
367+
.catch(failTest)
368+
.then(done);
369+
});
370+
});
371+
});

0 commit comments

Comments
 (0)