Skip to content

Commit 3bef9a9

Browse files
committed
add getUidsFromCalcData helper
1 parent 362da1f commit 3bef9a9

File tree

5 files changed

+39
-22
lines changed

5 files changed

+39
-22
lines changed

src/plots/get_data.js

+17
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,20 @@ exports.getSubplotData = function getSubplotData(data, type, subplotId) {
123123

124124
return subplotData;
125125
};
126+
127+
/**
128+
* Get a lookup object of trace uids corresponding in a given calcdata array.
129+
*
130+
* @param {array} calcdata: as in gd.calcdata (or a subset)
131+
* @return {object} lookup object of uids (`uid: 1`)
132+
*/
133+
exports.getUidsFromCalcData = function(calcdata) {
134+
var out = {};
135+
136+
for(var i = 0; i < calcdata.length; i++) {
137+
var trace = calcdata[i][0].trace;
138+
out[trace.uid] = 1;
139+
}
140+
141+
return out;
142+
};

src/traces/carpet/plot.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,21 @@ var orientText = require('./orient_text');
1717
var svgTextUtils = require('../../lib/svg_text_utils');
1818
var Lib = require('../../lib');
1919
var alignmentConstants = require('../../constants/alignment');
20+
var getUidsFromCalcData = require('../../plots/get_data').getUidsFromCalcData;
2021

2122
module.exports = function plot(gd, plotinfo, cdcarpet, carpetLayer) {
22-
var i;
23+
var uidLookup = getUidsFromCalcData(cdcarpet);
2324

2425
carpetLayer.selectAll('g.trace').each(function() {
2526
var classString = d3.select(this).attr('class');
2627
var oldUid = classString.split('carpet')[1].split(/\s/)[0];
27-
for(i = 0; i < cdcarpet.length; i++) {
28-
if(oldUid === cdcarpet[i][0].trace.uid) return;
28+
29+
if(!uidLookup[oldUid]) {
30+
d3.select(this).remove();
2931
}
30-
d3.select(this).remove();
3132
});
3233

33-
for(i = 0; i < cdcarpet.length; i++) {
34+
for(var i = 0; i < cdcarpet.length; i++) {
3435
plotOne(gd, plotinfo, cdcarpet[i], carpetLayer);
3536
}
3637
};

src/traces/contour/plot.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var Drawing = require('../../components/drawing');
1616
var svgTextUtils = require('../../lib/svg_text_utils');
1717
var Axes = require('../../plots/cartesian/axes');
1818
var setConvert = require('../../plots/cartesian/set_convert');
19+
var getUidsFromCalcData = require('../../plots/get_data').getUidsFromCalcData;
1920

2021
var heatmapPlot = require('../heatmap/plot');
2122
var makeCrossings = require('./make_crossings');
@@ -26,18 +27,16 @@ var closeBoundaries = require('./close_boundaries');
2627
var constants = require('./constants');
2728
var costConstants = constants.LABELOPTIMIZER;
2829

29-
3030
exports.plot = function plot(gd, plotinfo, cdcontours, contourLayer) {
31-
var i;
31+
var uidLookup = getUidsFromCalcData(cdcontours);
3232

3333
contourLayer.selectAll('g.contour').each(function(d) {
34-
for(i = 0; i < cdcontours.length; i++) {
35-
if(d.trace.uid === cdcontours[i][0].trace.uid) return;
34+
if(!uidLookup[d.trace.uid]) {
35+
d3.select(this).remove();
3636
}
37-
d3.select(this).remove();
3837
});
3938

40-
for(i = 0; i < cdcontours.length; i++) {
39+
for(var i = 0; i < cdcontours.length; i++) {
4140
plotOne(gd, plotinfo, cdcontours[i], contourLayer);
4241
}
4342
};

src/traces/contourcarpet/plot.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ var map1dArray = require('../carpet/map_1d_array');
1313
var makepath = require('../carpet/makepath');
1414
var Drawing = require('../../components/drawing');
1515
var Lib = require('../../lib');
16+
var getUidsFromCalcData = require('../../plots/get_data').getUidsFromCalcData;
1617

1718
var makeCrossings = require('../contour/make_crossings');
1819
var findAllPaths = require('../contour/find_all_paths');
@@ -25,18 +26,16 @@ var mapPathinfo = require('./map_pathinfo');
2526
var lookupCarpet = require('../carpet/lookup_carpetid');
2627
var closeBoundaries = require('../contour/close_boundaries');
2728

28-
2929
module.exports = function plot(gd, plotinfo, cdcontours, contourcarpetLayer) {
30-
var i;
30+
var uidLookup = getUidsFromCalcData(cdcontours);
3131

3232
contourcarpetLayer.selectAll('g.contour').each(function(d) {
33-
for(i = 0; i < cdcontours.length; i++) {
34-
if(d.trace.uid === cdcontours[i][0].trace.uid) return;
33+
if(!uidLookup[d.trace.uid]) {
34+
d3.select(this).remove();
3535
}
36-
d3.select(this).remove();
3736
});
3837

39-
for(i = 0; i < cdcontours.length; i++) {
38+
for(var i = 0; i < cdcontours.length; i++) {
4039
plotOne(gd, plotinfo, cdcontours[i], contourcarpetLayer);
4140
}
4241
};

src/traces/heatmap/plot.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,22 @@ var Registry = require('../../registry');
1616
var Lib = require('../../lib');
1717
var Colorscale = require('../../components/colorscale');
1818
var xmlnsNamespaces = require('../../constants/xmlns_namespaces');
19+
var getUidsFromCalcData = require('../../plots/get_data').getUidsFromCalcData;
1920

2021
var maxRowLength = require('./max_row_length');
2122

2223
module.exports = function(gd, plotinfo, cdheatmaps, heatmapLayer) {
23-
var i;
24+
var uidLookup = getUidsFromCalcData(cdheatmaps);
2425

2526
heatmapLayer.selectAll('.hm > image').each(function(d) {
2627
var oldTrace = d.trace || {};
27-
for(i = 0; i < cdheatmaps.length; i++) {
28-
if(oldTrace.uid === cdheatmaps[i][0].trace.uid) return;
28+
29+
if(!uidLookup[oldTrace.uid]) {
30+
d3.select(this.parentNode).remove();
2931
}
30-
d3.select(this.parentNode).remove();
3132
});
3233

33-
for(i = 0; i < cdheatmaps.length; i++) {
34+
for(var i = 0; i < cdheatmaps.length; i++) {
3435
plotOne(gd, plotinfo, cdheatmaps[i], heatmapLayer);
3536
}
3637
};

0 commit comments

Comments
 (0)