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

Skip to content

Commit d7efaf9

Browse files
committed
use calcdata instead of fullData in mapbox plot:
- main argument: reuse calc routines and make mapbox calcdata (which is used in the hover routine) on par with cartesian - set 'ms', mc', 'mcc' and 'mrc' in scattermapbox calc set
1 parent bbab048 commit d7efaf9

File tree

5 files changed

+122
-96
lines changed

5 files changed

+122
-96
lines changed

src/plots/mapbox/index.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ exports.plot = function plotMapbox(gd) {
5252
mapboxgl.accessToken = CREDS.accessToken;
5353

5454
var fullLayout = gd._fullLayout,
55-
fullData = gd._fullData,
55+
calcData = gd.calcdata,
5656
mapboxIds = Plots.getSubplotIds(fullLayout, 'mapbox');
5757

5858
for(var i = 0; i < mapboxIds.length; i++) {
5959
var id = mapboxIds[i],
60-
fullMapboxData = Plots.getSubplotData(fullData, 'mapbox', id),
60+
subplotCalcData = getSubplotCalcData(calcData, id),
6161
mapbox = fullLayout[id]._subplot;
6262

6363
if(!mapbox) {
@@ -72,7 +72,7 @@ exports.plot = function plotMapbox(gd) {
7272
fullLayout[id]._subplot = mapbox;
7373
}
7474

75-
mapbox.plot(fullMapboxData, fullLayout, gd._promises);
75+
mapbox.plot(subplotCalcData, fullLayout, gd._promises);
7676
}
7777
};
7878

@@ -114,3 +114,16 @@ exports.toSVG = function(gd) {
114114
mapbox.destroy();
115115
}
116116
};
117+
118+
function getSubplotCalcData(calcData, id) {
119+
var subplotCalcData = [];
120+
121+
for(var i = 0; i < calcData.length; i++) {
122+
var calcTrace = calcData[i],
123+
trace = calcTrace[0].trace;
124+
125+
if(trace.subplot === id) subplotCalcData.push(calcTrace);
126+
}
127+
128+
return subplotCalcData;
129+
}

src/plots/mapbox/mapbox.js

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ module.exports = function createMapbox(opts) {
4747
return mapbox;
4848
};
4949

50-
proto.plot = function(fullData, fullLayout, promises) {
50+
proto.plot = function(calcData, fullLayout, promises) {
5151
var self = this;
5252

5353
// feed in new mapbox options
@@ -57,19 +57,19 @@ proto.plot = function(fullData, fullLayout, promises) {
5757

5858
if(!self.map) {
5959
promise = new Promise(function(resolve) {
60-
self.createMap(fullData, fullLayout, resolve);
60+
self.createMap(calcData, fullLayout, resolve);
6161
});
6262
}
6363
else {
6464
promise = new Promise(function(resolve) {
65-
self.updateMap(fullData, fullLayout, resolve);
65+
self.updateMap(calcData, fullLayout, resolve);
6666
});
6767
}
6868

6969
promises.push(promise);
7070
};
7171

72-
proto.createMap = function(fullData, fullLayout, resolve) {
72+
proto.createMap = function(calcData, fullLayout, resolve) {
7373
var self = this,
7474
gd = self.gd,
7575
opts = self.opts;
@@ -88,7 +88,7 @@ proto.createMap = function(fullData, fullLayout, resolve) {
8888
});
8989

9090
map.once('load', function() {
91-
self.updateData(fullData);
91+
self.updateData(calcData);
9292
self.updateLayout(fullLayout);
9393

9494
self.resolveOnRender(resolve);
@@ -129,7 +129,7 @@ proto.createMap = function(fullData, fullLayout, resolve) {
129129
map.on('zoomstart', unhover);
130130
};
131131

132-
proto.updateMap = function(fullData, fullLayout, resolve) {
132+
proto.updateMap = function(calcData, fullLayout, resolve) {
133133
var self = this,
134134
map = self.map;
135135

@@ -145,32 +145,35 @@ proto.updateMap = function(fullData, fullLayout, resolve) {
145145
// to avoid 'lost event' errors
146146
self.traceHash = {};
147147

148-
self.updateData(fullData);
148+
self.updateData(calcData);
149149
self.updateLayout(fullLayout);
150150

151151
self.resolveOnRender(resolve);
152152
});
153153
}
154154
else {
155-
self.updateData(fullData);
155+
self.updateData(calcData);
156156
self.updateLayout(fullLayout);
157157

158158
self.resolveOnRender(resolve);
159159
}
160160
};
161161

162-
proto.updateData = function(fullData) {
162+
proto.updateData = function(calcData) {
163163
var traceHash = this.traceHash;
164-
var traceObj, i, j;
164+
165+
var traceObj, trace, i, j;
165166

166167
// update or create trace objects
167-
for(i = 0; i < fullData.length; i++) {
168-
var trace = fullData[i];
168+
for(i = 0; i < calcData.length; i++) {
169+
var calcTrace = calcData[i];
170+
171+
trace = calcTrace[0].trace;
169172
traceObj = traceHash[trace.uid];
170173

171-
if(traceObj) traceObj.update(trace);
174+
if(traceObj) traceObj.update(calcTrace);
172175
else {
173-
traceHash[trace.uid] = trace._module.plot(this, trace);
176+
traceHash[trace.uid] = trace._module.plot(this, calcTrace);
174177
}
175178
}
176179

@@ -180,8 +183,10 @@ proto.updateData = function(fullData) {
180183
for(i = 0; i < ids.length; i++) {
181184
var id = ids[i];
182185

183-
for(j = 0; j < fullData.length; j++) {
184-
if(id === fullData[j].uid) continue id_loop;
186+
for(j = 0; j < calcData.length; j++) {
187+
trace = calcData[j][0].trace;
188+
189+
if(id === trace.uid) continue id_loop;
185190
}
186191

187192
traceObj = traceHash[id];

src/traces/scattermapbox/calc.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,37 +9,50 @@
99

1010
'use strict';
1111

12-
var subtypes = require('../scatter/subtypes');
12+
var Lib = require('../../lib');
1313
var arrayToCalcItem = require('../../lib/array_to_calc_item');
14+
var hasColorscale = require('../../components/colorscale/has_colorscale');
15+
var makeColorScaleFn = require('../../components/colorscale/make_scale_function');
16+
var subtypes = require('../scatter/subtypes');
1417
var calcMarkerColorscale = require('../scatter/marker_colorscale_calc');
18+
var makeBubbleSizeFn = require('../scatter/make_bubble_size_func');
1519

1620

1721
module.exports = function calc(gd, trace) {
1822
var len = trace.lon.length,
23+
marker = trace.marker,
1924
hasMarkers = subtypes.hasMarkers(trace);
2025

26+
calcMarkerColorscale(trace);
27+
28+
var colorFn = hasColorscale(trace, 'marker') ?
29+
makeColorScaleFn(marker.colorscale, marker.cmin, marker.cmax) :
30+
Lib.identity;
31+
32+
var sizeFn = subtypes.isBubble(trace) ?
33+
makeBubbleSizeFn(trace) :
34+
Lib.identity;
35+
2136
var cd = new Array(len);
2237

2338
for(var i = 0; i < len; i++) {
2439
var cdi = cd[i] = {};
2540

41+
// the isNumeric check is done in the convert step
42+
2643
cdi.lonlat = [trace.lon[i], trace.lat[i]];
2744

2845
if(hasMarkers) {
29-
var marker = trace.marker;
30-
3146
arrayToCalcItem(marker.color, cdi, 'mc', i);
3247
arrayToCalcItem(marker.size, cdi, 'ms', i);
48+
arrayToCalcItem(marker.symbol, cdi, 'mx', i);
3349

34-
// TODO handle these for hover !!!
35-
// arrayToCalcItem(colorScaleFn(marker.color), cdi, 'mcc', i);
36-
// arrayToCalcItem(sizFn(marker.size), cdi, 'mrc', i);
50+
if(cdi.mc !== undefined) cdi.mcc = colorFn(cdi.mc);
51+
if(cdi.ms !== undefined) cdi.mrc = sizeFn(cdi.ms);
3752
}
3853

3954
arrayToCalcItem(trace.text, cdi, 'tx', i);
4055
}
4156

42-
calcMarkerColorscale(trace);
43-
4457
return cd;
4558
};

0 commit comments

Comments
 (0)