From 158cdb97db7706644083900a91d008acce87ba56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 30 Mar 2016 10:38:23 -0400 Subject: [PATCH 1/5] lint in contour calc --- src/traces/contour/calc.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/traces/contour/calc.js b/src/traces/contour/calc.js index a432e17456c..2e41de9251d 100644 --- a/src/traces/contour/calc.js +++ b/src/traces/contour/calc.js @@ -13,21 +13,25 @@ var Axes = require('../../plots/cartesian/axes'); var heatmapCalc = require('../heatmap/calc'); +// most is the same as heatmap calc, then adjust it +// though a few things inside heatmap calc still look for +// contour maps, because the makeBoundArray calls are too entangled module.exports = function calc(gd, trace) { - // most is the same as heatmap calc, then adjust it - // though a few things inside heatmap calc still look for - // contour maps, because the makeBoundArray calls are too entangled var cd = heatmapCalc(gd, trace), contours = trace.contours; // check if we need to auto-choose contour levels - if(trace.autocontour!==false) { + if(trace.autocontour !== false) { var dummyAx = { type: 'linear', range: [trace.zmin, trace.zmax] }; - Axes.autoTicks(dummyAx, - (trace.zmax - trace.zmin) / (trace.ncontours||15)); + + Axes.autoTicks( + dummyAx, + (trace.zmax - trace.zmin) / (trace.ncontours || 15) + ); + contours.start = Axes.tickFirst(dummyAx); contours.size = dummyAx.dtick; dummyAx.range.reverse(); @@ -37,7 +41,7 @@ module.exports = function calc(gd, trace) { if(contours.end === trace.zmax) contours.end -= contours.size; // so rounding errors don't cause us to miss the last contour - contours.end += contours.size/100; + contours.end += contours.size / 100; // copy auto-contour info back to the source data. trace._input.contours = contours; From 395678da30fff2b166484a13c7f592dbef637ce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 30 Mar 2016 12:05:01 -0400 Subject: [PATCH 2/5] add no-floating-decimal eslint rule --- .eslintrc | 1 + test/jasmine/tests/contour_test.js | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.eslintrc b/.eslintrc index 384ef0783ce..f39c183260f 100644 --- a/.eslintrc +++ b/.eslintrc @@ -35,6 +35,7 @@ "no-multi-spaces": [2], "no-whitespace-before-property": [2], "no-unexpected-multiline": [2], + "no-floating-decimal": [2], "space-infix-ops": [0, {"int32Hint": false}], "quotes": [2, "single"], "dot-notation": [2, {"allowKeywords": false}], diff --git a/test/jasmine/tests/contour_test.js b/test/jasmine/tests/contour_test.js index 3dd05aa0a13..97348016a2b 100644 --- a/test/jasmine/tests/contour_test.js +++ b/test/jasmine/tests/contour_test.js @@ -25,12 +25,12 @@ describe('Test contour', function() { type: 'contour', z: [[10, 10.625, 12.5, 15.625], [5.625, 6.25, 8.125, 11.25], - [2.5, 3.125, 5., 8.125], + [2.5, 3.125, 5.0, 8.125], [0.625, 1.25, 3.125, 6.25]], contours: { start: 4, end: 14, - size: .5 + size: 0.5 } }; supplyDefaults(traceIn, traceOut, defaultColor, layout); @@ -40,7 +40,7 @@ describe('Test contour', function() { type: 'contour', z: [[10, 10.625, 12.5, 15.625], [5.625, 6.25, 8.125, 11.25], - [2.5, 3.125, 5., 8.125], + [2.5, 3.125, 5.0, 8.125], [0.625, 1.25, 3.125, 6.25]] }; supplyDefaults(traceIn, traceOut, defaultColor, layout); From e800e2a6a97eeeed10ab90eb75c8284bb0c9c987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Wed, 30 Mar 2016 14:17:14 -0400 Subject: [PATCH 3/5] add image test for contour coloring 'heatmap' and 'lines' --- .../baselines/contour_heatmap_coloring.png | Bin 0 -> 43972 bytes test/image/baselines/contour_lines_coloring.png | Bin 0 -> 29784 bytes test/image/mocks/contour_heatmap_coloring.json | 12 ++++++++++++ test/image/mocks/contour_lines_coloring.json | 12 ++++++++++++ 4 files changed, 24 insertions(+) create mode 100644 test/image/baselines/contour_heatmap_coloring.png create mode 100644 test/image/baselines/contour_lines_coloring.png create mode 100644 test/image/mocks/contour_heatmap_coloring.json create mode 100644 test/image/mocks/contour_lines_coloring.json diff --git a/test/image/baselines/contour_heatmap_coloring.png b/test/image/baselines/contour_heatmap_coloring.png new file mode 100644 index 0000000000000000000000000000000000000000..71729494d04863978a6527effd3558eb66855acc GIT binary patch literal 43972 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

5SLm(@%C6gQtdXGih@p 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 X{Rq8NDpf8V;HM;~j{Ge1-0yz?q3W^P literal 0 HcmV?d00001 diff --git a/test/image/baselines/contour_lines_coloring.png b/test/image/baselines/contour_lines_coloring.png new file mode 100644 index 0000000000000000000000000000000000000000..1740bee25453c99204297e41b6390a3e88abe87a GIT binary patch literal 29784 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 Date: Wed, 30 Mar 2016 15:22:50 -0400 Subject: [PATCH 4/5] centralize contour color map function creation: - contour colorbar and style now call same color map function creator - contourgl will used the same makeColorMap --- src/traces/contour/colorbar.js | 55 ++++---------------- src/traces/contour/make_color_map.js | 78 ++++++++++++++++++++++++++++ src/traces/contour/style.js | 67 ++++++++++++------------ 3 files changed, 122 insertions(+), 78 deletions(-) create mode 100644 src/traces/contour/make_color_map.js diff --git a/src/traces/contour/colorbar.js b/src/traces/contour/colorbar.js index f11972a2ced..51b9e65fab4 100644 --- a/src/traces/contour/colorbar.js +++ b/src/traces/contour/colorbar.js @@ -9,12 +9,11 @@ 'use strict'; -var d3 = require('d3'); - var Plots = require('../../plots/plots'); -var getColorscale = require('../../components/colorscale/get_scale'); var drawColorbar = require('../../components/colorbar/draw'); +var makeColorMap = require('./make_color_map'); + module.exports = function colorbar(gd, cd) { var trace = cd[0].trace, @@ -32,55 +31,23 @@ module.exports = function colorbar(gd, cd) { var contours = trace.contours, line = trace.line, - cs = contours.size||1, - nc = Math.floor((contours.end + cs/10 - contours.start)/cs)+1, - scl = getColorscale(trace.colorscale), - extraLevel = contours.coloring==='lines' ? 0 : 1, - colormap = d3.scale.linear().interpolate(d3.interpolateRgb), - colorDomain = scl.map(function(si) { - return (si[0]*(nc+extraLevel-1)-(extraLevel/2)) * cs + - contours.start; - }), - colorRange = scl.map(function(si) { return si[1]; }); + cs = contours.size || 1, + coloring = contours.coloring; + + var colorMap = makeColorMap(trace, {isColorbar: true}); - // colorbar fill and lines - if(contours.coloring==='heatmap') { - if(trace.zauto && trace.autocontour===false) { - trace.zmin = contours.start-cs/2; - trace.zmax = trace.zmin+nc*cs; - } + if(coloring === 'heatmap') { cb.filllevels({ start: trace.zmin, end: trace.zmax, - size: (trace.zmax-trace.zmin)/254 + size: (trace.zmax - trace.zmin) / 254 }); - colorDomain = scl.map(function(si) { - return si[0]*(trace.zmax-trace.zmin) + trace.zmin; - }); - - // do the contours extend beyond the colorscale? - // if so, extend the colorscale with constants - var zRange = d3.extent([trace.zmin, trace.zmax, contours.start, - contours.start + cs*(nc-1)]), - zmin = zRange[trace.zmin Date: Wed, 30 Mar 2016 15:23:00 -0400 Subject: [PATCH 5/5] add makeColorMap tests --- test/jasmine/tests/contour_test.js | 85 ++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/test/jasmine/tests/contour_test.js b/test/jasmine/tests/contour_test.js index 97348016a2b..1b7b36e2186 100644 --- a/test/jasmine/tests/contour_test.js +++ b/test/jasmine/tests/contour_test.js @@ -1,5 +1,7 @@ var Plots = require('@src/plots/plots'); var Contour = require('@src/traces/contour'); +var makeColorMap = require('@src/traces/contour/make_color_map'); +var colorScales = require('@src/components/colorscale/scales'); describe('Test contour', function() { @@ -47,4 +49,87 @@ describe('Test contour', function() { expect(traceOut.autocontour).toBe(true); }); }); + + describe('makeColorMap', function() { + it('should make correct color map function (\'fill\' coloring case)', function() { + var trace = { + contours: { + coloring: 'fill', + start: -1.5, + size: 0.5, + end: 2.005 + }, + colorscale: [[ + 0, 'rgb(12,51,131)' + ], [ + 0.25, 'rgb(10,136,186)' + ], [ + 0.5, 'rgb(242,211,56)' + ], [ + 0.75, 'rgb(242,143,56)' + ], [ + 1, 'rgb(217,30,30)' + ]] + }; + + var colorMap = makeColorMap(trace); + + expect(colorMap.domain()).toEqual( + [-1.75, -0.75, 0.25, 1.25, 2.25] + ); + + expect(colorMap.range()).toEqual([ + 'rgb(12,51,131)', 'rgb(10,136,186)', 'rgb(242,211,56)', + 'rgb(242,143,56)', 'rgb(217,30,30)' + ]); + }); + + it('should make correct color map function (\'heatmap\' coloring case)', function() { + var trace = { + contours: { + coloring: 'heatmap', + start: 1.5, + size: 0.5, + end: 5.505 + }, + colorscale: colorScales.RdBu, + zmin: 1, + zmax: 6 + }; + + var colorMap = makeColorMap(trace); + + expect(colorMap.domain()).toEqual( + [1, 2.75, 3.5, 4, 4.5, 6] + ); + + expect(colorMap.range()).toEqual([ + 'rgb(5,10,172)', 'rgb(106,137,247)', 'rgb(190,190,190)', + 'rgb(220,170,132)', 'rgb(230,145,90)', 'rgb(178,10,28)' + ]); + }); + + it('should make correct color map function (\'lines\' coloring case)', function() { + var trace = { + contours: { + coloring: 'lines', + start: 1.5, + size: 0.5, + end: 5.505 + }, + colorscale: colorScales.RdBu + }; + + var colorMap = makeColorMap(trace); + + expect(colorMap.domain()).toEqual( + [1.5, 2.9, 3.5, 3.9, 4.3, 5.5] + ); + + expect(colorMap.range()).toEqual([ + 'rgb(5,10,172)', 'rgb(106,137,247)', 'rgb(190,190,190)', + 'rgb(220,170,132)', 'rgb(230,145,90)', 'rgb(178,10,28)' + ]); + }); + }); });