From 32353a3aba8a1215630fd9aea4bfa753d6864dfe Mon Sep 17 00:00:00 2001 From: Cindy Zhang Date: Mon, 13 Nov 2017 08:23:14 -0800 Subject: [PATCH 1/4] adding layout.colorway --- src/lib/coerce.js | 16 +++++++++++ src/plots/layout_attributes.js | 9 +++++- src/plots/plots.js | 6 +++- src/traces/pie/calc.js | 37 +++++++++++++++++------- test/image/mocks/layout-colorway.json | 32 +++++++++++++++++++++ test/jasmine/tests/pie_test.js | 41 +++++++++++++++++++++++++++ 6 files changed, 128 insertions(+), 13 deletions(-) create mode 100644 test/image/mocks/layout-colorway.json diff --git a/src/lib/coerce.js b/src/lib/coerce.js index 5810311ed99..45f9ea360cf 100644 --- a/src/lib/coerce.js +++ b/src/lib/coerce.js @@ -141,6 +141,22 @@ exports.valObjectMeta = { else propOut.set(dflt); } }, + colorlist: { + description: [ + 'A list of colors.', + 'Must be an {array} containing valid colors.', + ].join(' '), + requiredOpts: [], + otherOpts: ['dflt'], + coerceFunction: function(v, propOut, dflt) { + function isColor(color) { + return tinycolor(color).isValid(); + } + if(!Array.isArray(v)) propOut.set(dflt); + else if(v.every(isColor)) propOut.set(v); + else propOut.set(dflt); + } + }, colorscale: { description: [ 'A Plotly colorscale either picked by a name:', diff --git a/src/plots/layout_attributes.js b/src/plots/layout_attributes.js index c3ee025aa75..7c23ffd77e8 100644 --- a/src/plots/layout_attributes.js +++ b/src/plots/layout_attributes.js @@ -175,5 +175,12 @@ module.exports = { role: 'info', editType: 'legend', description: 'Determines whether or not a legend is drawn.' - } + }, + colorway: { + valType: 'colorlist', + dflt: colorAttrs.defaults, + role: 'style', + editType: 'calc', + description: 'Sets the default trace colors.' + }, }; diff --git a/src/plots/plots.js b/src/plots/plots.js index 7e0973196f6..145f08c4f4f 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -950,8 +950,9 @@ plots.supplyFrameDefaults = function(frameIn) { }; plots.supplyTraceDefaults = function(traceIn, traceOutIndex, layout, traceInIndex) { + var colorway = layout.colorway || Color.defaults; var traceOut = {}, - defaultColor = Color.defaults[traceOutIndex % Color.defaults.length]; + defaultColor = colorway[traceOutIndex % colorway.length]; function coerce(attr, dflt) { return Lib.coerce(traceIn, traceOut, plots.attributes, attr, dflt); @@ -1138,6 +1139,8 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut) { coerce('separators'); coerce('hidesources'); + coerce('colorway'); + Registry.getComponentMethod( 'calendars', 'handleDefaults' @@ -2171,6 +2174,7 @@ plots.doCalcdata = function(gd, traces) { // for sharing colors across pies (and for legend) fullLayout._piecolormap = {}; + fullLayout._piecolorway = null; fullLayout._piedefaultcolorcount = 0; // If traces were specified and this trace was not included, diff --git a/src/traces/pie/calc.js b/src/traces/pie/calc.js index bb425b1a606..8e31767d917 100644 --- a/src/traces/pie/calc.js +++ b/src/traces/pie/calc.js @@ -21,6 +21,7 @@ module.exports = function calc(gd, trace) { var colors = trace.marker.colors; var cd = []; var fullLayout = gd._fullLayout; + var colorWay = fullLayout.colorway; var colorMap = fullLayout._piecolormap; var allThisTraceLabels = {}; var vTotal = 0; @@ -28,6 +29,10 @@ module.exports = function calc(gd, trace) { var i, v, label, hidden, pt; + if(!fullLayout._piecolorway && colorWay !== Color.defaults) { + fullLayout._piecolorway = generateDefaultColors(colorWay); + } + if(trace.dlabel) { labels = new Array(vals.length); for(i = 0; i < vals.length; i++) { @@ -107,7 +112,10 @@ module.exports = function calc(gd, trace) { pt.color = colorMap[pt.label]; } else { - colorMap[pt.label] = pt.color = nextDefaultColor(fullLayout._piedefaultcolorcount); + colorMap[pt.label] = pt.color = nextDefaultColor( + fullLayout._piedefaultcolorcount, + fullLayout._piecolorway + ); fullLayout._piedefaultcolorcount++; } } @@ -148,22 +156,29 @@ module.exports = function calc(gd, trace) { */ var pieDefaultColors; -function nextDefaultColor(index) { +function nextDefaultColor(index, pieColorWay) { if(!pieDefaultColors) { // generate this default set on demand (but then it gets saved in the module) var mainDefaults = Color.defaults; - pieDefaultColors = mainDefaults.slice(); + pieDefaultColors = generateDefaultColors(mainDefaults); + } - var i; + var pieColors = pieColorWay || pieDefaultColors; + return pieColors[index % pieColors.length]; +} - for(i = 0; i < mainDefaults.length; i++) { - pieDefaultColors.push(tinycolor(mainDefaults[i]).lighten(20).toHexString()); - } +function generateDefaultColors(colorList) { + var i; - for(i = 0; i < Color.defaults.length; i++) { - pieDefaultColors.push(tinycolor(mainDefaults[i]).darken(20).toHexString()); - } + var pieColors = colorList.slice(); + + for(i = 0; i < colorList.length; i++) { + pieColors.push(tinycolor(colorList[i]).lighten(20).toHexString()); + } + + for(i = 0; i < colorList.length; i++) { + pieColors.push(tinycolor(colorList[i]).darken(20).toHexString()); } - return pieDefaultColors[index % pieDefaultColors.length]; + return pieColors; } diff --git a/test/image/mocks/layout-colorway.json b/test/image/mocks/layout-colorway.json new file mode 100644 index 00000000000..d6a16d389e7 --- /dev/null +++ b/test/image/mocks/layout-colorway.json @@ -0,0 +1,32 @@ +{ + "data": [ + {"y": [8, 7, 7, 6, 5, 4, 4, 3, 2, 2, 3]}, + {"y": [7, 7, 6, 5, 4, 4, 3, 2, 2, 3, 8]}, + {"y": [7, 6, 5, 4, 4, 3, 2, 2, 3, 8, 7]}, + {"y": [6, 5, 4, 4, 3, 2, 2, 3, 8, 7, 7]}, + {"y": [5, 4, 4, 3, 2, 2, 3, 8, 7, 7, 6]}, + { + "labels": ["a","b","c","c","c","a","d","e","f","f","g","h"], + "type": "pie", + "domain": {"x": [0, 0.4]}, + "xaxis": "x2", + "yaxis": "y2" + } + ], + "layout": { + "title": "Custom Trace Color Defaults", + "colorway": [ + "#DE5845", + "#E83898", + "#A83DD1", + "#5A38E8", + "#3C71DE" + ], + "xaxis": { + "domain": [0.4, 1] + }, + "yaxis": { + "anchor": "y2" + } + } +} diff --git a/test/jasmine/tests/pie_test.js b/test/jasmine/tests/pie_test.js index 1f4e109a18f..a1e688e2467 100644 --- a/test/jasmine/tests/pie_test.js +++ b/test/jasmine/tests/pie_test.js @@ -546,3 +546,44 @@ describe('Test event data of interactions on a pie plot:', function() { }); }); }); + +describe('pie relayout', function() { + var gd; + + beforeEach(function() { gd = createGraphDiv(); }); + + afterEach(destroyGraphDiv); + + it('will update colors when colorway is updated', function(done) { + var originalColors = [ + 'rgb(255,0,0)', + 'rgb(0,255,0)', + 'rgb(0,0,255)', + ]; + + var relayoutColors = [ + 'rgb(255,255,0)', + 'rgb(0,255,255)', + 'rgb(255,0,255)', + ]; + + function checkRelayoutColor(d, i) { + expect(this.style.fill.replace(/\s/g, '')).toBe(relayoutColors[i]); + } + + Plotly.newPlot(gd, [{ + labels: ['a', 'b', 'c', 'a', 'b', 'a'], + type: 'pie' + }], { + colorway: originalColors + }) + .then(function() { + return Plotly.relayout(gd, 'colorway', relayoutColors); + }) + .then(function() { + var slices = d3.selectAll('.slice path'); + slices.each(checkRelayoutColor); + }) + .then(done); + }); +}); From a69bbf98717e07ce1afd116ae80004c3c27a2342 Mon Sep 17 00:00:00 2001 From: Cindy Zhang Date: Mon, 13 Nov 2017 17:50:23 -0800 Subject: [PATCH 2/4] adding layout-colorway baseline image --- test/image/baselines/layout-colorway.png | Bin 0 -> 61755 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/image/baselines/layout-colorway.png diff --git a/test/image/baselines/layout-colorway.png b/test/image/baselines/layout-colorway.png new file mode 100644 index 0000000000000000000000000000000000000000..332db30b056d09f0ab59a5bd6b751e6e87407a07 GIT binary patch literal 61755 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

--SjrZ5pDGZTgL0f%CI+&IU6ca77~t9 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 LH57{F%mV%eb^}yu literal 0 HcmV?d00001 From 1edd0008ea8b3f644804f32c03dc6735161a0a67 Mon Sep 17 00:00:00 2001 From: Cindy Zhang Date: Tue, 14 Nov 2017 08:55:08 -0800 Subject: [PATCH 3/4] adding test for coerce colorlist, cleanup --- src/lib/coerce.js | 2 +- test/image/mocks/layout-colorway.json | 7 +------ test/jasmine/tests/lib_test.js | 9 +++++++++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/lib/coerce.js b/src/lib/coerce.js index 45f9ea360cf..6a609832e04 100644 --- a/src/lib/coerce.js +++ b/src/lib/coerce.js @@ -152,7 +152,7 @@ exports.valObjectMeta = { function isColor(color) { return tinycolor(color).isValid(); } - if(!Array.isArray(v)) propOut.set(dflt); + if(!Array.isArray(v) || !v.length) propOut.set(dflt); else if(v.every(isColor)) propOut.set(v); else propOut.set(dflt); } diff --git a/test/image/mocks/layout-colorway.json b/test/image/mocks/layout-colorway.json index d6a16d389e7..8ef37ab9578 100644 --- a/test/image/mocks/layout-colorway.json +++ b/test/image/mocks/layout-colorway.json @@ -8,9 +8,7 @@ { "labels": ["a","b","c","c","c","a","d","e","f","f","g","h"], "type": "pie", - "domain": {"x": [0, 0.4]}, - "xaxis": "x2", - "yaxis": "y2" + "domain": {"x": [0, 0.4]} } ], "layout": { @@ -24,9 +22,6 @@ ], "xaxis": { "domain": [0.4, 1] - }, - "yaxis": { - "anchor": "y2" } } } diff --git a/test/jasmine/tests/lib_test.js b/test/jasmine/tests/lib_test.js index 4e97759e6b8..379e3a4fe68 100644 --- a/test/jasmine/tests/lib_test.js +++ b/test/jasmine/tests/lib_test.js @@ -1073,6 +1073,15 @@ describe('Test lib.js:', function() { }); }); + it('should work for valType \'colorlist\' where', function() { + var shouldPass = [['red'],['#ffffff'],['rgba(0,0,0,1)'], ['red', 'green', 'blue']], + shouldFail = [1, null, undefined, {}, [], 'red', ['red', null]]; + + assert(shouldPass, shouldFail, { + valType: 'colorlist' + }); + }); + it('should work for valType \'colorscale\' where', function() { var good = [ [0, 'red'], [1, 'blue'] ], bad = [ [0.1, 'red'], [1, 'blue'] ], From 2877e0e5dda45fe0c485a341fc7ccdc3b372bc81 Mon Sep 17 00:00:00 2001 From: Cindy Zhang Date: Tue, 14 Nov 2017 17:48:09 -0800 Subject: [PATCH 4/4] fixing lint issues in colorlist test --- test/jasmine/tests/lib_test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jasmine/tests/lib_test.js b/test/jasmine/tests/lib_test.js index 379e3a4fe68..12b61aaa31a 100644 --- a/test/jasmine/tests/lib_test.js +++ b/test/jasmine/tests/lib_test.js @@ -1074,7 +1074,7 @@ describe('Test lib.js:', function() { }); it('should work for valType \'colorlist\' where', function() { - var shouldPass = [['red'],['#ffffff'],['rgba(0,0,0,1)'], ['red', 'green', 'blue']], + var shouldPass = [['red'], ['#ffffff'], ['rgba(0,0,0,1)'], ['red', 'green', 'blue']], shouldFail = [1, null, undefined, {}, [], 'red', ['red', null]]; assert(shouldPass, shouldFail, {