Skip to content

Commit 922bad6

Browse files
authored
Merge pull request #3274 from plotly/2925-default-colorbars
initial implementation of `layout.colorscale`
2 parents 2f6c6e7 + dca4350 commit 922bad6

File tree

31 files changed

+482
-42
lines changed

31 files changed

+482
-42
lines changed

Diff for: src/components/colorscale/calc.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@
1111

1212
var Lib = require('../../lib');
1313

14-
var scales = require('./scales');
1514
var flipScale = require('./flip_scale');
1615

1716

18-
module.exports = function calc(trace, vals, containerStr, cLetter) {
17+
module.exports = function calc(gd, trace, opts) {
18+
var fullLayout = gd._fullLayout;
19+
var vals = opts.vals;
20+
var containerStr = opts.containerStr;
21+
var cLetter = opts.cLetter;
1922
var container = trace;
2023
var inputContainer = trace._input;
2124
var fullInputContainer = trace._fullInput;
@@ -84,9 +87,9 @@ module.exports = function calc(trace, vals, containerStr, cLetter) {
8487
doUpdate(autoAttr, (auto !== false || (min === undefined && max === undefined)));
8588

8689
if(container.autocolorscale) {
87-
if(min * max < 0) scl = scales.RdBu;
88-
else if(min >= 0) scl = scales.Reds;
89-
else scl = scales.Blues;
90+
if(min * max < 0) scl = fullLayout.colorscale.diverging;
91+
else if(min >= 0) scl = fullLayout.colorscale.sequential;
92+
else scl = gd._fullLayout.colorscale.sequentialminus;
9093

9194
// reversescale is handled at the containerOut level
9295
doUpdate('colorscale', scl, container.reversescale ? flipScale(scl) : scl);

Diff for: src/components/colorscale/index.js

+8
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,20 @@
99

1010
'use strict';
1111

12+
exports.moduleType = 'component';
13+
14+
exports.name = 'colorscale';
15+
1216
exports.scales = require('./scales');
1317

1418
exports.defaultScale = require('./default_scale');
1519

1620
exports.attributes = require('./attributes');
1721

22+
exports.layoutAttributes = require('./layout_attributes');
23+
24+
exports.supplyLayoutDefaults = require('./layout_defaults');
25+
1826
exports.handleDefaults = require('./defaults');
1927

2028
exports.calc = require('./calc');

Diff for: src/components/colorscale/layout_attributes.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* Copyright 2012-2018, Plotly, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
'use strict';
10+
11+
var scales = require('./scales');
12+
13+
var msg = 'Note that `autocolorscale` must be true for this attribute to work.';
14+
module.exports = {
15+
editType: 'calc',
16+
sequential: {
17+
valType: 'colorscale',
18+
dflt: scales.Reds,
19+
role: 'style',
20+
editType: 'calc',
21+
description: [
22+
'Sets the default sequential colorscale for positive values.',
23+
msg
24+
].join(' ')
25+
},
26+
sequentialminus: {
27+
valType: 'colorscale',
28+
dflt: scales.Blues,
29+
role: 'style',
30+
editType: 'calc',
31+
description: [
32+
'Sets the default sequential colorscale for negative values.',
33+
msg
34+
].join(' ')
35+
},
36+
diverging: {
37+
valType: 'colorscale',
38+
dflt: scales.RdBu,
39+
role: 'style',
40+
editType: 'calc',
41+
description: [
42+
'Sets the default diverging colorscale.',
43+
msg
44+
].join(' ')
45+
}
46+
};

Diff for: src/components/colorscale/layout_defaults.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* Copyright 2012-2018, Plotly, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
10+
'use strict';
11+
12+
var Lib = require('../../lib');
13+
var colorscaleAttrs = require('./layout_attributes');
14+
var Template = require('../../plot_api/plot_template');
15+
16+
module.exports = function supplyLayoutDefaults(layoutIn, layoutOut) {
17+
var colorscaleIn = layoutIn.colorscale;
18+
var colorscaleOut = Template.newContainer(layoutOut, 'colorscale');
19+
function coerce(attr, dflt) {
20+
return Lib.coerce(colorscaleIn, colorscaleOut, colorscaleAttrs, attr, dflt);
21+
}
22+
23+
coerce('sequential');
24+
coerce('sequentialminus');
25+
coerce('diverging');
26+
};

Diff for: src/core.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ register([
5353
require('./components/rangeslider'),
5454
require('./components/rangeselector'),
5555
require('./components/grid'),
56-
require('./components/errorbars')
56+
require('./components/errorbars'),
57+
require('./components/colorscale')
5758
]);
5859

5960
// locales en and en-US are required for default behavior

Diff for: src/plots/layout_attributes.js

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
var fontAttrs = require('./font_attributes');
1212
var colorAttrs = require('../components/color/attributes');
13+
var colorscaleAttrs = require('../components/colorscale/layout_attributes');
1314

1415
var globalFont = fontAttrs({
1516
editType: 'calc',
@@ -188,6 +189,7 @@ module.exports = {
188189
editType: 'calc',
189190
description: 'Sets the default trace colors.'
190191
},
192+
colorscale: colorscaleAttrs,
191193
datarevision: {
192194
valType: 'any',
193195
role: 'info',

Diff for: src/traces/bar/calc.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,18 @@ module.exports = function calc(gd, trace) {
4242

4343
// auto-z and autocolorscale if applicable
4444
if(hasColorscale(trace, 'marker')) {
45-
colorscaleCalc(trace, trace.marker.color, 'marker', 'c');
45+
colorscaleCalc(gd, trace, {
46+
vals: trace.marker.color,
47+
containerStr: 'marker',
48+
cLetter: 'c'
49+
});
4650
}
4751
if(hasColorscale(trace, 'marker.line')) {
48-
colorscaleCalc(trace, trace.marker.line.color, 'marker.line', 'c');
52+
colorscaleCalc(gd, trace, {
53+
vals: trace.marker.line.color,
54+
containerStr: 'marker.line',
55+
cLetter: 'c'
56+
});
4957
}
5058

5159
arraysToCalcdata(cd, trace);

Diff for: src/traces/barpolar/calc.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,18 @@ function calc(gd, trace) {
5353
}
5454

5555
if(hasColorscale(trace, 'marker')) {
56-
colorscaleCalc(trace, trace.marker.color, 'marker', 'c');
56+
colorscaleCalc(gd, trace, {
57+
vals: trace.marker.color,
58+
containerStr: 'marker',
59+
cLetter: 'c'
60+
});
5761
}
5862
if(hasColorscale(trace, 'marker.line')) {
59-
colorscaleCalc(trace, trace.marker.line.color, 'marker.line', 'c');
63+
colorscaleCalc(gd, trace, {
64+
vals: trace.marker.line.color,
65+
containerStr: 'marker.line',
66+
cLetter: 'c'
67+
});
6068
}
6169

6270
arraysToCalcdata(cd, trace);

Diff for: src/traces/choropleth/calc.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ module.exports = function calc(gd, trace) {
3030
}
3131

3232
arraysToCalcdata(calcTrace, trace);
33-
colorscaleCalc(trace, trace.z, '', 'z');
33+
colorscaleCalc(gd, trace, {
34+
vals: trace.z,
35+
containerStr: '',
36+
cLetter: 'z'
37+
});
3438
calcSelection(calcTrace, trace);
3539

3640
return calcTrace;

Diff for: src/traces/cone/calc.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,9 @@ module.exports = function calc(gd, trace) {
3434
trace._len = len;
3535
trace._normMax = normMax;
3636

37-
colorscaleCalc(trace, [normMin, normMax], '', 'c');
37+
colorscaleCalc(gd, trace, {
38+
vals: [normMin, normMax],
39+
containerStr: '',
40+
cLetter: 'c'
41+
});
3842
};

Diff for: src/traces/contourcarpet/calc.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,11 @@ function heatmappishCalc(gd, trace) {
101101

102102
if(trace.contours.type === 'levels' && trace.contours.coloring !== 'none') {
103103
// auto-z and autocolorscale if applicable
104-
colorscaleCalc(trace, z, '', 'z');
104+
colorscaleCalc(gd, trace, {
105+
vals: z,
106+
containerStr: '',
107+
cLetter: 'z'
108+
});
105109
}
106110

107111
return [cd0];

Diff for: src/traces/heatmap/calc.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,11 @@ module.exports = function calc(gd, trace) {
146146

147147
// auto-z and autocolorscale if applicable
148148
if(!isContour || trace.contours.type !== 'constraint') {
149-
colorscaleCalc(trace, z, '', 'z');
149+
colorscaleCalc(gd, trace, {
150+
vals: z,
151+
containerStr: '',
152+
cLetter: 'z'
153+
});
150154
}
151155

152156
if(isContour && trace.contours && trace.contours.coloring === 'heatmap') {

Diff for: src/traces/mesh3d/calc.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ var colorscaleCalc = require('../../components/colorscale/calc');
1212

1313
module.exports = function calc(gd, trace) {
1414
if(trace.intensity) {
15-
colorscaleCalc(trace, trace.intensity, '', 'c');
15+
colorscaleCalc(gd, trace, {
16+
vals: trace.intensity,
17+
containerStr: '',
18+
cLetter: 'c'
19+
});
1620
}
1721
};

Diff for: src/traces/parcats/calc.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,11 @@ module.exports = function calc(gd, trace) {
7373
// Process colorscale
7474
if(line) {
7575
if(hasColorscale(trace, 'line')) {
76-
colorscaleCalc(trace, trace.line.color, 'line', 'c');
76+
colorscaleCalc(gd, trace, {
77+
vals: trace.line.color,
78+
containerStr: 'line',
79+
cLetter: 'c'
80+
});
7781
}
7882
markerColorscale = Drawing.tryColorscale(line);
7983
} else {

Diff for: src/traces/parcoords/calc.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ module.exports = function calc(gd, trace) {
1919
var cscale = cs ? trace.line.colorscale : [[0, trace.line.color], [1, trace.line.color]];
2020

2121
if(hasColorscale(trace, 'line')) {
22-
calcColorscale(trace, color, 'line', 'c');
22+
calcColorscale(gd, trace, {
23+
vals: color,
24+
containerStr: 'line',
25+
cLetter: 'c'
26+
});
2327
}
2428

2529
return wrap({

Diff for: src/traces/scatter/calc.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ function calc(gd, trace) {
8787
}
8888

8989
arraysToCalcdata(cd, trace);
90-
calcColorscale(trace);
90+
calcColorscale(gd, trace);
9191
calcSelection(cd, trace);
9292

9393
if(stackGroupOpts) {

Diff for: src/traces/scatter/colorscale_calc.js

+16-4
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,29 @@ var calcColorscale = require('../../components/colorscale/calc');
1515
var subTypes = require('./subtypes');
1616

1717

18-
module.exports = function calcMarkerColorscale(trace) {
18+
module.exports = function calcMarkerColorscale(gd, trace) {
1919
if(subTypes.hasLines(trace) && hasColorscale(trace, 'line')) {
20-
calcColorscale(trace, trace.line.color, 'line', 'c');
20+
calcColorscale(gd, trace, {
21+
vals: trace.line.color,
22+
containerStr: 'line',
23+
cLetter: 'c'
24+
});
2125
}
2226

2327
if(subTypes.hasMarkers(trace)) {
2428
if(hasColorscale(trace, 'marker')) {
25-
calcColorscale(trace, trace.marker.color, 'marker', 'c');
29+
calcColorscale(gd, trace, {
30+
vals: trace.marker.color,
31+
containerStr: 'marker',
32+
cLetter: 'c'
33+
});
2634
}
2735
if(hasColorscale(trace, 'marker.line')) {
28-
calcColorscale(trace, trace.marker.line.color, 'marker.line', 'c');
36+
calcColorscale(gd, trace, {
37+
vals: trace.marker.line.color,
38+
containerStr: 'marker.line',
39+
cLetter: 'c'
40+
});
2941
}
3042
}
3143
};

Diff for: src/traces/scatter3d/calc.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module.exports = function calc(gd, trace) {
2121
var cd = [{x: false, y: false, trace: trace, t: {}}];
2222

2323
arraysToCalcdata(cd, trace);
24-
calcColorscales(trace);
24+
calcColorscales(gd, trace);
2525

2626
return cd;
2727
};

Diff for: src/traces/scattercarpet/calc.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ module.exports = function calc(gd, trace) {
5050
cd[0].trace = trace;
5151

5252
calcMarkerSize(trace, serieslen);
53-
calcColorscale(trace);
53+
calcColorscale(gd, trace);
5454
arraysToCalcdata(cd, trace);
5555
calcSelection(cd, trace);
5656

Diff for: src/traces/scattergeo/calc.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ module.exports = function calc(gd, trace) {
3939
}
4040

4141
arraysToCalcdata(calcTrace, trace);
42-
calcMarkerColorscale(trace);
42+
calcMarkerColorscale(gd, trace);
4343
calcSelection(calcTrace, trace);
4444

4545
if(len) {

Diff for: src/traces/scattergl/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ function calc(gd, trace) {
8484
}
8585

8686
// create scene options and scene
87-
calcColorscales(trace);
87+
calcColorscales(gd, trace);
8888
var opts = sceneOptions(gd, subplot, trace, positions, x, y);
8989
var scene = sceneUpdate(gd, subplot);
9090

Diff for: src/traces/scatterpolar/calc.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ module.exports = function calc(gd, trace) {
4545
var ppad = calcMarkerSize(trace, len);
4646
trace._extremes.x = Axes.findExtremes(radialAxis, rArray, {ppad: ppad});
4747

48-
calcColorscale(trace);
48+
calcColorscale(gd, trace);
4949
arraysToCalcdata(cd, trace);
5050
calcSelection(cd, trace);
5151

Diff for: src/traces/scatterpolargl/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ function calc(gd, trace) {
3838
stash.r = rArray;
3939
stash.theta = thetaArray;
4040

41-
calcColorscales(trace);
41+
calcColorscales(gd, trace);
4242

4343
// only compute 'style' options in calc, as position options
4444
// depend on the radial range and must be set in plot

Diff for: src/traces/scatterternary/calc.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ module.exports = function calc(gd, trace) {
7272
}
7373

7474
calcMarkerSize(trace, serieslen);
75-
calcColorscale(trace);
75+
calcColorscale(gd, trace);
7676
arraysToCalcdata(cd, trace);
7777
calcSelection(cd, trace);
7878

0 commit comments

Comments
 (0)