From d69f27c255d7f53605ddba3216c755439448f326 Mon Sep 17 00:00:00 2001 From: Nicolas Kruchten Date: Fri, 15 Feb 2019 14:08:27 -0500 Subject: [PATCH 1/6] Add midpoint attr to color scales --- src/components/colorscale/attributes.js | 17 +++++++++++++++++ src/components/colorscale/calc.js | 11 +++++++++++ src/components/colorscale/defaults.js | 1 + test/image/mocks/cmid.json | 16 ++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 test/image/mocks/cmid.json diff --git a/src/components/colorscale/attributes.js b/src/components/colorscale/attributes.js index f1dad9b9573..83b9480a700 100644 --- a/src/components/colorscale/attributes.js +++ b/src/components/colorscale/attributes.js @@ -87,6 +87,8 @@ module.exports = function colorScaleAttrs(context, opts) { var auto = cLetter + 'auto'; var min = cLetter + 'min'; var max = cLetter + 'max'; + var mid = cLetter + 'mid'; + var autoFull = code(contextHead + auto); var minFull = code(contextHead + min); var maxFull = code(contextHead + max); var minmaxFull = minFull + ' and ' + maxFull; @@ -160,6 +162,21 @@ module.exports = function colorScaleAttrs(context, opts) { ].join('') }; + attrs[mid] = { + valType: 'number', + role: 'info', + dflt: null, + editType: editTypeOverride || 'plot', + impliedEdits: minmaxImpliedEdits, + description: [ + 'Sets the mid-point of the color domain by scaling ', minFull, + ' and/or ', maxFull, ' to be equidistant to this point.', + effectDesc, + ' Value should have the same units as ', colorAttrFull, '. ', + 'Has no effect when ', autoFull, ' is `false`.' + ].join('') + }; + attrs.colorscale = { valType: 'colorscale', role: 'style', diff --git a/src/components/colorscale/calc.js b/src/components/colorscale/calc.js index 46690b37ca0..6fb87c06b0c 100644 --- a/src/components/colorscale/calc.js +++ b/src/components/colorscale/calc.js @@ -23,9 +23,11 @@ module.exports = function calc(gd, trace, opts) { var autoAttr = cLetter + 'auto'; var minAttr = cLetter + 'min'; var maxAttr = cLetter + 'max'; + var midAttr = cLetter + 'mid'; var auto = container[autoAttr]; var min = container[minAttr]; var max = container[maxAttr]; + var mid = container[midAttr]; var scl = container.colorscale; if(auto !== false || min === undefined) { @@ -36,6 +38,15 @@ module.exports = function calc(gd, trace, opts) { max = Lib.aggNums(Math.max, null, vals); } + if(auto !== false && mid !== undefined) { + if(max - mid > mid - min) { + min = mid - (max - mid); + } + else if(max - mid < mid - min) { + max = mid + (mid - min); + } + } + if(min === max) { min -= 0.5; max += 0.5; diff --git a/src/components/colorscale/defaults.js b/src/components/colorscale/defaults.js index 387ecc787b9..5e9c7445640 100644 --- a/src/components/colorscale/defaults.js +++ b/src/components/colorscale/defaults.js @@ -36,6 +36,7 @@ module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce, coerce(prefix + cLetter + 'auto', !validMinMax); coerce(prefix + cLetter + 'min'); coerce(prefix + cLetter + 'max'); + coerce(prefix + cLetter + 'mid'); // handles both the trace case (autocolorscale is false by default) and // the marker and marker.line case (autocolorscale is true by default) diff --git a/test/image/mocks/cmid.json b/test/image/mocks/cmid.json new file mode 100644 index 00000000000..02dd58faa0d --- /dev/null +++ b/test/image/mocks/cmid.json @@ -0,0 +1,16 @@ +{ + "data": [ + { + "mode": "markers", + "x": [1,2,3], + "y": [1,2,3], + "marker": { + "color": [-1,0,10], + "showscale": true, + "cmid": 0 + } + } + ], + "layout": { + } +} From b8dce0ae0ae3373bc022d18897a8e31597978232 Mon Sep 17 00:00:00 2001 From: Nicolas Kruchten Date: Mon, 18 Feb 2019 17:00:28 -0500 Subject: [PATCH 2/6] fixing tests --- src/traces/scattermapbox/attributes.js | 1 + test/jasmine/tests/scattergeo_test.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/traces/scattermapbox/attributes.js b/src/traces/scattermapbox/attributes.js index 55bb3b7d2e2..8609904e1a2 100644 --- a/src/traces/scattermapbox/attributes.js +++ b/src/traces/scattermapbox/attributes.js @@ -93,6 +93,7 @@ module.exports = overrideAll({ cauto: markerAttrs.cauto, cmax: markerAttrs.cmax, cmin: markerAttrs.cmin, + cmid: markerAttrs.cmid, autocolorscale: markerAttrs.autocolorscale, reversescale: markerAttrs.reversescale, showscale: markerAttrs.showscale, diff --git a/test/jasmine/tests/scattergeo_test.js b/test/jasmine/tests/scattergeo_test.js index f84846d2714..fd87caddeac 100644 --- a/test/jasmine/tests/scattergeo_test.js +++ b/test/jasmine/tests/scattergeo_test.js @@ -90,7 +90,7 @@ describe('Test scattergeo defaults', function() { describe('Test scattergeo calc', function() { function _calc(opts) { - var base = { type: 'scattermapbox' }; + var base = { type: 'scattergeo' }; var trace = Lib.extendFlat({}, base, opts); var gd = { data: [trace] }; From ba7288759c919d62931bed01989573d465e02e6f Mon Sep 17 00:00:00 2001 From: Nicolas Kruchten Date: Mon, 18 Feb 2019 17:36:15 -0500 Subject: [PATCH 3/6] removing unnecessary mock --- test/image/mocks/cmid.json | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 test/image/mocks/cmid.json diff --git a/test/image/mocks/cmid.json b/test/image/mocks/cmid.json deleted file mode 100644 index 02dd58faa0d..00000000000 --- a/test/image/mocks/cmid.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "data": [ - { - "mode": "markers", - "x": [1,2,3], - "y": [1,2,3], - "marker": { - "color": [-1,0,10], - "showscale": true, - "cmid": 0 - } - } - ], - "layout": { - } -} From 23c1cf0832a585a47b4231dbd9e9adfd785d382a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 19 Feb 2019 12:07:10 -0500 Subject: [PATCH 4/6] fix and :lock: cmid/zmid edits --- src/components/colorscale/attributes.js | 4 +- src/components/colorscale/defaults.js | 12 +++-- test/jasmine/tests/plot_api_test.js | 71 +++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 6 deletions(-) diff --git a/src/components/colorscale/attributes.js b/src/components/colorscale/attributes.js index 83b9480a700..014377c1c91 100644 --- a/src/components/colorscale/attributes.js +++ b/src/components/colorscale/attributes.js @@ -166,8 +166,8 @@ module.exports = function colorScaleAttrs(context, opts) { valType: 'number', role: 'info', dflt: null, - editType: editTypeOverride || 'plot', - impliedEdits: minmaxImpliedEdits, + editType: 'calc', + impliedEdits: autoImpliedEdits, description: [ 'Sets the mid-point of the color domain by scaling ', minFull, ' and/or ', maxFull, ' to be equidistant to this point.', diff --git a/src/components/colorscale/defaults.js b/src/components/colorscale/defaults.js index 5e9c7445640..75cd284b2be 100644 --- a/src/components/colorscale/defaults.js +++ b/src/components/colorscale/defaults.js @@ -33,10 +33,14 @@ module.exports = function colorScaleDefaults(traceIn, traceOut, layout, coerce, var minIn = containerIn[cLetter + 'min']; var maxIn = containerIn[cLetter + 'max']; var validMinMax = isNumeric(minIn) && isNumeric(maxIn) && (minIn < maxIn); - coerce(prefix + cLetter + 'auto', !validMinMax); - coerce(prefix + cLetter + 'min'); - coerce(prefix + cLetter + 'max'); - coerce(prefix + cLetter + 'mid'); + var auto = coerce(prefix + cLetter + 'auto', !validMinMax); + + if(auto) { + coerce(prefix + cLetter + 'mid'); + } else { + coerce(prefix + cLetter + 'min'); + coerce(prefix + cLetter + 'max'); + } // handles both the trace case (autocolorscale is false by default) and // the marker and marker.line case (autocolorscale is true by default) diff --git a/test/jasmine/tests/plot_api_test.js b/test/jasmine/tests/plot_api_test.js index 837f1569f2d..c0cf010eab7 100644 --- a/test/jasmine/tests/plot_api_test.js +++ b/test/jasmine/tests/plot_api_test.js @@ -1195,6 +1195,77 @@ describe('Test plot api', function() { .then(done); }); + it('turns on cauto when cmid is edited', function(done) { + function _assert(msg, exp) { + return function() { + var mk = gd._fullData[0].marker; + for(var k in exp) { + expect(mk[k]).toBe(exp[k], [msg, k].join(' - ')); + } + }; + } + + function _restyle(arg) { + return function() { return Plotly.restyle(gd, arg); }; + } + + Plotly.plot(gd, [{ + mode: 'markers', + y: [1, 2, 1], + marker: { color: [1, -1, 4] } + }]) + .then(_assert('base', { + cauto: true, + cmid: undefined, + cmin: -1, + cmax: 4 + })) + .then(_restyle({'marker.cmid': 0})) + .then(_assert('set cmid=0', { + cauto: true, + cmid: 0, + cmin: -4, + cmax: 4 + })) + .then(_restyle({'marker.cmid': -2})) + .then(_assert('set cmid=-2', { + cauto: true, + cmid: -2, + cmin: -8, + cmax: 4 + })) + .then(_restyle({'marker.cmid': 2})) + .then(_assert('set cmid=2', { + cauto: true, + cmid: 2, + cmin: -1, + cmax: 5 + })) + .then(_restyle({'marker.cmin': 0})) + .then(_assert('set cmin=0', { + cauto: false, + cmid: undefined, + cmin: 0, + cmax: 5 + })) + .then(_restyle({'marker.cmax': 10})) + .then(_assert('set cmin=0 + cmax=10', { + cauto: false, + cmid: undefined, + cmin: 0, + cmax: 10 + })) + .then(_restyle({'marker.cauto': true, 'marker.cmid': null})) + .then(_assert('back to cauto=true', { + cauto: true, + cmid: undefined, + cmin: -1, + cmax: 4 + })) + .catch(failTest) + .then(done); + }); + it('turns off autobin when you edit bin specs', function(done) { // test retained (modified) for backward compat with new autobin logic var start0 = 0.2; From 40a75103ed75cd72ec5863d231fd00f557575b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 19 Feb 2019 12:07:18 -0500 Subject: [PATCH 5/6] add cmid/zmid mock --- test/image/baselines/cmid-zmid.png | Bin 0 -> 27462 bytes test/image/mocks/cmid-zmid.json | 43 +++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 test/image/baselines/cmid-zmid.png create mode 100644 test/image/mocks/cmid-zmid.json diff --git a/test/image/baselines/cmid-zmid.png b/test/image/baselines/cmid-zmid.png new file mode 100644 index 0000000000000000000000000000000000000000..cb929f0f1e7084c4446ab8c6f074f7bfafac9467 GIT binary patch literal 27462 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 Vj^@5C!1`EX8_cXsubb=&{WnWjmaYH* literal 0 HcmV?d00001 diff --git a/test/image/mocks/cmid-zmid.json b/test/image/mocks/cmid-zmid.json new file mode 100644 index 00000000000..68b47fc7dbc --- /dev/null +++ b/test/image/mocks/cmid-zmid.json @@ -0,0 +1,43 @@ +{ + "data": [{ + "y": [1, 2, 1], + "mode": "markers", + "marker": { + "size": 20, + "color": [-1, 1, 10], + "cmid": "0", + "colorbar": { + "len": 0.3, + "y": "1", + "yanchor": "top", + "title": {"text": "marker.cmid=0", "side": "right"} + } + } + }, { + "type": "heatmap", + "z": [[1,2], [2, 3]], + "zmid": -1, + "colorbar": { + "len": 0.3, + "y": "0.5", + "yanchor": "middle", + "title": {"text": "zmid=-1", "side": "right"} + } + }, { + "type": "bar", + "y": [0.5, 1, 0.5], + "name": "marker.line.cmid=2", + "hoverlabel": {"namelength": -1}, + "marker": { + "line": { + "width": 2, + "color": [-1, -1, -10], + "cmid": 2 + } + } + }], + "layout": { + "title": {"text": "Traces with set cmid / zmid"}, + "showlegend": false + } +} From ff6781226bf5717efdcf0c9041b9e5f0b6e7abc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 19 Feb 2019 13:37:45 -0500 Subject: [PATCH 6/6] fix surface cmin/cmax/cauto defaults test --- test/jasmine/tests/surface_test.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/jasmine/tests/surface_test.js b/test/jasmine/tests/surface_test.js index 943189c325b..2d77fed1928 100644 --- a/test/jasmine/tests/surface_test.js +++ b/test/jasmine/tests/surface_test.js @@ -127,16 +127,14 @@ describe('Test surface', function() { it('should coerce \'c\' attributes with \'c\' values regardless of `\'z\' if \'c\' is present', function() { traceIn = { z: [[1, 2, 3], [2, 1, 2]], - zauto: false, zmin: 0, zmax: 10, - cauto: true, cmin: -10, cmax: 20 }; supplyDefaults(traceIn, traceOut, defaultColor, layout); - expect(traceOut.cauto).toEqual(true); + expect(traceOut.cauto).toEqual(false); expect(traceOut.cmin).toEqual(-10); expect(traceOut.cmax).toEqual(20); });