Skip to content

Commit 9e5c70c

Browse files
authored
Merge pull request #3161 from plotly/splom-regression-fixups
Splom marker edits regression fixups
2 parents f23f84c + 62d6acf commit 9e5c70c

File tree

3 files changed

+113
-20
lines changed

3 files changed

+113
-20
lines changed

src/traces/splom/attributes.js

+20-14
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,25 @@ var extendFlat = require('../../lib/extend').extendFlat;
1818
var scatterMarkerAttrs = scatterAttrs.marker;
1919
var scatterMarkerLineAttrs = scatterMarkerAttrs.line;
2020

21+
var markerLineAttrs = extendFlat(colorAttrs('marker.line', {editTypeOverride: 'calc'}), {
22+
width: extendFlat({}, scatterMarkerLineAttrs.width, {editType: 'calc'}),
23+
editType: 'calc'
24+
});
25+
26+
var markerAttrs = extendFlat(colorAttrs('marker'), {
27+
symbol: scatterMarkerAttrs.symbol,
28+
size: extendFlat({}, scatterMarkerAttrs.size, {editType: 'markerSize'}),
29+
sizeref: scatterMarkerAttrs.sizeref,
30+
sizemin: scatterMarkerAttrs.sizemin,
31+
sizemode: scatterMarkerAttrs.sizemode,
32+
opacity: scatterMarkerAttrs.opacity,
33+
colorbar: scatterMarkerAttrs.colorbar,
34+
line: markerLineAttrs,
35+
editType: 'calc'
36+
});
37+
38+
markerAttrs.color.editType = markerAttrs.cmin.editType = markerAttrs.cmax.editType = 'style';
39+
2140
function makeAxesValObject(axLetter) {
2241
return {
2342
valType: 'info_array',
@@ -105,20 +124,7 @@ module.exports = {
105124
].join(' ')
106125
}),
107126

108-
marker: extendFlat({}, colorAttrs('marker'), {
109-
symbol: scatterMarkerAttrs.symbol,
110-
size: extendFlat({}, scatterMarkerAttrs.size, {editType: 'markerSize'}),
111-
sizeref: scatterMarkerAttrs.sizeref,
112-
sizemin: scatterMarkerAttrs.sizemin,
113-
sizemode: scatterMarkerAttrs.sizemode,
114-
opacity: scatterMarkerAttrs.opacity,
115-
colorbar: scatterMarkerAttrs.colorbar,
116-
line: extendFlat({}, colorAttrs('marker.line'), {
117-
width: scatterMarkerLineAttrs.width,
118-
editType: 'calc'
119-
}),
120-
editType: 'calc'
121-
}),
127+
marker: markerAttrs,
122128

123129
xaxes: makeAxesValObject('x'),
124130
yaxes: makeAxesValObject('y'),

src/traces/splom/index.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -309,15 +309,17 @@ function editStyle(gd, cd0) {
309309
var trace = cd0.trace;
310310
var scene = gd._fullLayout._splomScenes[trace.uid];
311311

312-
calcColorscales(trace);
312+
if(scene) {
313+
calcColorscales(trace);
313314

314-
Lib.extendFlat(scene.matrixOptions, convertMarkerStyle(trace));
315-
// TODO [un]selected styles?
315+
Lib.extendFlat(scene.matrixOptions, convertMarkerStyle(trace));
316+
// TODO [un]selected styles?
316317

317-
var opts = Lib.extendFlat({}, scene.matrixOptions, scene.viewOpts);
318+
var opts = Lib.extendFlat({}, scene.matrixOptions, scene.viewOpts);
318319

319-
// TODO this is too long for arrayOk attributes!
320-
scene.matrix.update(opts, null);
320+
// TODO this is too long for arrayOk attributes!
321+
scene.matrix.update(opts, null);
322+
}
321323
}
322324

323325
function hoverPoints(pointData, xval, yval) {

test/jasmine/tests/splom_test.js

+85
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,50 @@ describe('Test splom interactions:', function() {
983983
.catch(failTest)
984984
.then(done);
985985
});
986+
987+
it('@gl should not fail when editing graph with visible:false traces', function(done) {
988+
Plotly.plot(gd, [{
989+
type: 'splom',
990+
dimensions: [{values: []}, {values: []}]
991+
}, {
992+
type: 'splom',
993+
dimensions: [{values: [1, 2, 3]}, {values: [2, 3, 4]}]
994+
}])
995+
.then(function() {
996+
var fullData = gd._fullData;
997+
var fullLayout = gd._fullLayout;
998+
var splomScenes = fullLayout._splomScenes;
999+
var opts = splomScenes[fullData[1].uid].matrixOptions;
1000+
1001+
expect(fullData[0].visible).toBe(false, 'trace 0 visible');
1002+
expect(fullData[1].visible).toBe(true, 'trace 1 visible');
1003+
expect(Object.keys(splomScenes).length).toBe(1, '# of splom scenes');
1004+
1005+
expect(opts.opacity).toBe(1, 'marker opacity');
1006+
expect(opts.color).toEqual(new Uint8Array([255, 127, 14, 255]), 'marker color');
1007+
expect(opts.colors).toBe(undefined, 'marker colors');
1008+
1009+
return Plotly.restyle(gd, 'marker.opacity', [undefined, [0.2, 0.3, 0.4]]);
1010+
})
1011+
.then(function() {
1012+
var fullData = gd._fullData;
1013+
var fullLayout = gd._fullLayout;
1014+
var opts = fullLayout._splomScenes[fullData[1].uid].matrixOptions;
1015+
1016+
// ignored by regl-splom
1017+
expect(opts.opacity).toBe(1, 'marker opacity');
1018+
// ignored by regl-splom
1019+
expect(opts.color).toEqual(new Uint8Array([255, 127, 14, 255]), 'marker color');
1020+
// marker.opacity applied here
1021+
expect(opts.colors).toBeCloseTo2DArray([
1022+
[1, 0.498, 0.0549, 0.2],
1023+
[1, 0.498, 0.0549, 0.3],
1024+
[1, 0.498, 0.0549, 0.4]
1025+
], 'marker colors');
1026+
})
1027+
.catch(failTest)
1028+
.then(done);
1029+
});
9861030
});
9871031

9881032
describe('Test splom update switchboard:', function() {
@@ -1129,6 +1173,31 @@ describe('Test splom update switchboard:', function() {
11291173
expect(toPlainArray(scene.matrixOptions.colors[2]))
11301174
.toBeCloseToArray([0, 0, 1, 1], 1, msg + '- 2');
11311175

1176+
return Plotly.restyle(gd, {
1177+
'marker.cmin': -3,
1178+
'marker.cmax': 3,
1179+
'marker.color': [[1, 2, 3]]
1180+
});
1181+
})
1182+
.then(function() {
1183+
var msg = 'after colorscale marker.color restyle';
1184+
1185+
assertSpies(msg, [
1186+
['supplyDefaults', 1],
1187+
['doCalcdata', 0],
1188+
['doTicks', 0],
1189+
['clear', 1],
1190+
['update', 1],
1191+
['draw', 1]
1192+
]);
1193+
1194+
expect(toPlainArray(scene.matrixOptions.colors[0]))
1195+
.toBeCloseToArray([0.890, 0.6, 0.4078, 1], 1, msg + '- 0');
1196+
expect(toPlainArray(scene.matrixOptions.colors[1]))
1197+
.toBeCloseToArray([0.81176, 0.3333, 0.2431, 1], 1, msg + '- 1');
1198+
expect(toPlainArray(scene.matrixOptions.colors[2]))
1199+
.toBeCloseToArray([0.6980, 0.0392, 0.1098, 1], 1, msg + '- 2');
1200+
11321201
return Plotly.restyle(gd, 'marker.size', 20);
11331202
})
11341203
.then(function() {
@@ -1164,6 +1233,22 @@ describe('Test splom update switchboard:', function() {
11641233
expect(scene.matrixOptions.sizes).toBeCloseToArray([2, 5, 10], 1, msg);
11651234
expect(gd._fullLayout.xaxis.range)
11661235
.toBeCloseToArray([0.853, 3.235], 1, 'xrng ' + msg);
1236+
1237+
return Plotly.restyle(gd, 'marker.symbol', 'square');
1238+
})
1239+
.then(function() {
1240+
var msg = 'after scalar marker.symbol restyle';
1241+
1242+
assertSpies(msg, [
1243+
['supplyDefaults', 1],
1244+
['doCalcdata', 0],
1245+
['doTicks', 0],
1246+
['clear', 1],
1247+
['update', 1],
1248+
['draw', 1]
1249+
]);
1250+
1251+
expect(scene.matrixOptions.marker).not.toBeNull(msg);
11671252
})
11681253
.catch(failTest)
11691254
.then(done);

0 commit comments

Comments
 (0)