Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 88f3d9a

Browse files
committed
make use of colorscale makeScaleFunction everywhere!
- no more d3.scale.linear in heatmap, contour and all the colorbar modules! - this adds support for rgba colorscales in contour traces.
1 parent 982176a commit 88f3d9a

File tree

7 files changed

+43
-62
lines changed

7 files changed

+43
-62
lines changed

src/components/drawing/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ var isNumeric = require('fast-isnumeric');
1414

1515
var Registry = require('../../registry');
1616
var Color = require('../color');
17-
var Colorscale = require('../colorscale');
1817
var Lib = require('../../lib');
1918
var svgTextUtils = require('../../lib/svg_text_utils');
2019

2120
var xmlnsNamespaces = require('../../constants/xmlns_namespaces');
2221
var subTypes = require('../../traces/scatter/subtypes');
2322
var makeBubbleSizeFn = require('../../traces/scatter/make_bubble_size_func');
23+
var makeScaleFunction = require('../colorscale/make_scale_function');
2424

2525
var drawing = module.exports = {};
2626

@@ -331,7 +331,8 @@ drawing.tryColorscale = function(cont, contIn, prefix) {
331331
Lib.nestedProperty(contIn, prefix + 'cmin').set(min);
332332
Lib.nestedProperty(contIn, prefix + 'cmax').set(max);
333333
}
334-
return Colorscale.makeScaleFunction(scl, min, max);
334+
335+
return makeScaleFunction(scl, min, max);
335336
}
336337
else return Lib.identity;
337338
};

src/traces/choropleth/plot.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ var Fx = require('../../plots/cartesian/graph_interact');
1616
var Color = require('../../components/color');
1717
var Drawing = require('../../components/drawing');
1818

19-
var getColorscale = require('../../components/colorscale/get_scale');
2019
var makeScaleFunction = require('../../components/colorscale/make_scale_function');
2120
var getTopojsonFeatures = require('../../lib/topojson_utils').getTopojsonFeatures;
2221
var locationToFeature = require('../../lib/geo_location_utils').locationToFeature;
@@ -151,11 +150,13 @@ plotChoropleth.style = function(geo) {
151150
var trace = calcTrace[0].trace,
152151
s = d3.select(this),
153152
marker = trace.marker || {},
154-
markerLine = marker.line || {},
155-
zmin = trace.zmin,
156-
zmax = trace.zmax,
157-
scl = getColorscale(trace.colorscale),
158-
sclFunc = makeScaleFunction(scl, zmin, zmax);
153+
markerLine = marker.line || {};
154+
155+
var sclFunc = makeScaleFunction(
156+
trace.colorscale,
157+
trace.zmin,
158+
trace.zmax
159+
);
159160

160161
s.selectAll('path.choroplethlocation')
161162
.each(function(pt) {

src/traces/contour/make_color_map.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
'use strict';
1111

1212
var d3 = require('d3');
13-
14-
var getColorscale = require('../../components/colorscale/get_scale');
15-
13+
var makeScaleFunction = require('../../components/colorscale/make_scale_function');
1614

1715
module.exports = function makeColorMap(trace) {
1816
var contours = trace.contours,
@@ -22,7 +20,7 @@ module.exports = function makeColorMap(trace) {
2220
nc = Math.floor((end + cs / 10 - start) / cs) + 1,
2321
extra = contours.coloring === 'lines' ? 0 : 1;
2422

25-
var scl = getColorscale(trace.colorscale),
23+
var scl = trace.colorscale,
2624
len = scl.length;
2725

2826
var domain = new Array(len),
@@ -69,10 +67,5 @@ module.exports = function makeColorMap(trace) {
6967
}
7068
}
7169

72-
var colorMap = d3.scale.linear()
73-
.interpolate(d3.interpolateRgb)
74-
.domain(domain)
75-
.range(range);
76-
77-
return colorMap;
70+
return makeScaleFunction(scl, null, null, { domain: domain, range: range });
7871
};

src/traces/heatmap/colorbar.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,17 @@
99

1010
'use strict';
1111

12-
var d3 = require('d3');
1312
var isNumeric = require('fast-isnumeric');
1413

1514
var Lib = require('../../lib');
1615
var Plots = require('../../plots/plots');
17-
var getColorscale = require('../../components/colorscale/get_scale');
16+
var makeScaleFunction = require('../../components/colorscale/make_scale_function');
1817
var drawColorbar = require('../../components/colorbar/draw');
1918

2019

2120
module.exports = function colorbar(gd, cd) {
2221
var trace = cd[0].trace,
2322
cbId = 'cb' + trace.uid,
24-
scl = getColorscale(trace.colorscale),
2523
zmin = trace.zmin,
2624
zmax = trace.zmax;
2725

@@ -35,10 +33,10 @@ module.exports = function colorbar(gd, cd) {
3533
return;
3634
}
3735

38-
var cb = cd[0].t.cb = drawColorbar(gd, cbId);
39-
cb.fillcolor(d3.scale.linear()
40-
.domain(scl.map(function(v) { return zmin + v[0] * (zmax - zmin); }))
41-
.range(scl.map(function(v) { return v[1]; })))
36+
var cb = cd[0].t.cb = drawColorbar(gd, cbId),
37+
sclFunc = makeScaleFunction(trace.colorscale, zmin, zmax);
38+
39+
cb.fillcolor(sclFunc)
4240
.filllevels({start: zmin, end: zmax, size: (zmax - zmin) / 254})
4341
.options(trace.colorbar)();
4442
};

src/traces/heatmap/plot.js

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99

1010
'use strict';
1111

12-
var d3 = require('d3');
1312
var tinycolor = require('tinycolor2');
1413

1514
var Registry = require('../../registry');
1615
var Lib = require('../../lib');
17-
var getColorscale = require('../../components/colorscale/get_scale');
1816
var xmlnsNamespaces = require('../../constants/xmlns_namespaces');
17+
var makeScaleFunction = require('../../components/colorscale/make_scale_function');
1918

2019
var maxRowLength = require('./max_row_length');
2120

@@ -45,9 +44,6 @@ function plotOne(gd, plotinfo, cd) {
4544
}
4645

4746
var z = cd[0].z,
48-
min = trace.zmin,
49-
max = trace.zmax,
50-
scl = getColorscale(trace.colorscale),
5147
x = cd[0].x,
5248
y = cd[0].y,
5349
isContour = Registry.traceIs(trace, 'contour'),
@@ -170,15 +166,12 @@ function plotOne(gd, plotinfo, cd) {
170166
canvas.height = canvasH;
171167
var context = canvas.getContext('2d');
172168

173-
// interpolate for color scale
174-
// use an array instead of color strings, so we preserve alpha
175-
var s = d3.scale.linear()
176-
.domain(scl.map(function(si) { return si[0]; }))
177-
.range(scl.map(function(si) {
178-
var c = tinycolor(si[1]).toRgb();
179-
return [c.r, c.g, c.b, c.a];
180-
}))
181-
.clamp(true);
169+
var sclFunc = makeScaleFunction(
170+
trace.colorscale,
171+
trace.zmin,
172+
trace.zmax,
173+
{ noNumericCheck: true, returnArray: true }
174+
);
182175

183176
// map brick boundaries to image pixels
184177
var xpx,
@@ -289,7 +282,7 @@ function plotOne(gd, plotinfo, cd) {
289282

290283
function setColor(v, pixsize) {
291284
if(v !== undefined) {
292-
var c = s((v - min) / (max - min));
285+
var c = sclFunc(v);
293286
c[0] = Math.round(c[0]);
294287
c[1] = Math.round(c[1]);
295288
c[2] = Math.round(c[2]);

src/traces/scatter/colorbar.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@
99

1010
'use strict';
1111

12-
var d3 = require('d3');
1312
var isNumeric = require('fast-isnumeric');
1413

1514
var Lib = require('../../lib');
1615
var Plots = require('../../plots/plots');
17-
var getColorscale = require('../../components/colorscale/get_scale');
16+
var makeScaleFunction = require('../../components/colorscale/make_scale_function');
1817
var drawColorbar = require('../../components/colorbar/draw');
1918

2019

@@ -25,27 +24,25 @@ module.exports = function colorbar(gd, cd) {
2524

2625
gd._fullLayout._infolayer.selectAll('.' + cbId).remove();
2726

28-
// TODO unify Scatter.colorbar and Heatmap.colorbar
29-
// TODO make Plotly[module].colorbar support multiple colorbar per trace
27+
// TODO unify scatter and heatmap colorbar
28+
// TODO make Colorbar.draw support multiple colorbar per trace
3029

3130
if((marker === undefined) || !marker.showscale) {
3231
Plots.autoMargin(gd, cbId);
3332
return;
3433
}
3534

36-
var scl = getColorscale(marker.colorscale),
37-
vals = marker.color,
35+
var vals = marker.color,
3836
cmin = marker.cmin,
3937
cmax = marker.cmax;
4038

4139
if(!isNumeric(cmin)) cmin = Lib.aggNums(Math.min, null, vals);
4240
if(!isNumeric(cmax)) cmax = Lib.aggNums(Math.max, null, vals);
4341

44-
var cb = cd[0].t.cb = drawColorbar(gd, cbId);
42+
var cb = cd[0].t.cb = drawColorbar(gd, cbId),
43+
sclFunc = makeScaleFunction(marker.colorscale, cmin, cmax);
4544

46-
cb.fillcolor(d3.scale.linear()
47-
.domain(scl.map(function(v) { return cmin + v[0] * (cmax - cmin); }))
48-
.range(scl.map(function(v) { return v[1]; })))
45+
cb.fillcolor(sclFunc)
4946
.filllevels({start: cmin, end: cmax, size: (cmax - cmin) / 254})
5047
.options(marker.colorbar)();
5148
};

src/traces/surface/colorbar.js

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,23 @@
99

1010
'use strict';
1111

12-
var d3 = require('d3');
1312
var isNumeric = require('fast-isnumeric');
1413

1514
var Lib = require('../../lib');
1615
var Plots = require('../../plots/plots');
17-
var getColorscale = require('../../components/colorscale/get_scale');
16+
var makeScaleFunction = require('../../components/colorscale/make_scale_function');
1817
var drawColorbar = require('../../components/colorbar/draw');
1918

2019

2120
module.exports = function colorbar(gd, cd) {
2221
var trace = cd[0].trace,
2322
cbId = 'cb' + trace.uid,
24-
scl = getColorscale(trace.colorscale),
25-
zmin = trace.cmin,
26-
zmax = trace.cmax,
23+
cmin = trace.cmin,
24+
cmax = trace.cmax,
2725
vals = trace.surfacecolor || trace.z;
2826

29-
if(!isNumeric(zmin)) zmin = Lib.aggNums(Math.min, null, vals);
30-
if(!isNumeric(zmax)) zmax = Lib.aggNums(Math.max, null, vals);
27+
if(!isNumeric(cmin)) cmin = Lib.aggNums(Math.min, null, vals);
28+
if(!isNumeric(cmax)) cmax = Lib.aggNums(Math.max, null, vals);
3129

3230
gd._fullLayout._infolayer.selectAll('.' + cbId).remove();
3331

@@ -36,10 +34,10 @@ module.exports = function colorbar(gd, cd) {
3634
return;
3735
}
3836

39-
var cb = cd[0].t.cb = drawColorbar(gd, cbId);
40-
cb.fillcolor(d3.scale.linear()
41-
.domain(scl.map(function(v) { return zmin + v[0] * (zmax - zmin); }))
42-
.range(scl.map(function(v) { return v[1]; })))
43-
.filllevels({start: zmin, end: zmax, size: (zmax - zmin) / 254})
37+
var cb = cd[0].t.cb = drawColorbar(gd, cbId),
38+
sclFunc = makeScaleFunction(trace.colorscale, cmin, cmax);
39+
40+
cb.fillcolor(sclFunc)
41+
.filllevels({start: cmin, end: cmax, size: (cmax - cmin) / 254})
4442
.options(trace.colorbar)();
4543
};

0 commit comments

Comments
 (0)