Skip to content

Commit b23fc92

Browse files
authored
Merge pull request #1491 from plotly/convert-column-fixes
Fix xyz column convert routine for columns containing nulls
2 parents ca4ab42 + 93a70be commit b23fc92

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

src/traces/heatmap/convert_column_xyz.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
'use strict';
1111

1212
var Lib = require('../../lib');
13+
var BADNUM = require('../../constants/numerical').BADNUM;
1314

1415

1516
module.exports = function convertColumnXYZ(trace, xa, ya) {
@@ -38,16 +39,18 @@ module.exports = function convertColumnXYZ(trace, xa, ya) {
3839
y = yColdv.vals,
3940
z = Lib.init2dArray(y.length, x.length);
4041

41-
var ix, iy, text;
42+
var text;
4243

4344
if(hasColumnText) text = Lib.init2dArray(y.length, x.length);
4445

4546
for(i = 0; i < colLen; i++) {
46-
ix = Lib.findBin(xCol[i] + xColdv.minDiff / 2, x);
47-
iy = Lib.findBin(yCol[i] + yColdv.minDiff / 2, y);
47+
if(xCol[i] !== BADNUM && yCol[i] !== BADNUM) {
48+
var ix = Lib.findBin(xCol[i] + xColdv.minDiff / 2, x);
49+
var iy = Lib.findBin(yCol[i] + yColdv.minDiff / 2, y);
4850

49-
z[iy][ix] = zCol[i];
50-
if(hasColumnText) text[iy][ix] = textCol[i];
51+
z[iy][ix] = zCol[i];
52+
if(hasColumnText) text[iy][ix] = textCol[i];
53+
}
5154
}
5255

5356
trace.x = x;

test/jasmine/tests/heatmap_test.js

+25
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var Plotly = require('@lib/index');
22
var Plots = require('@src/plots/plots');
33
var Lib = require('@src/lib');
4+
var setConvert = require('@src/plots/cartesian/set_convert');
45

56
var convertColumnXYZ = require('@src/traces/heatmap/convert_column_xyz');
67
var Heatmap = require('@src/traces/heatmap');
@@ -264,6 +265,30 @@ describe('heatmap convertColumnXYZ', function() {
264265
[,, 4.234497, 4.321701, 4.450315, 4.416136,,, ]
265266
]);
266267
});
268+
269+
it('should convert x/y/z columns with nulls to z(x,y)', function() {
270+
xa = { type: 'linear' };
271+
ya = { type: 'linear' };
272+
273+
setConvert(xa);
274+
setConvert(ya);
275+
276+
trace = {
277+
x: [0, 0, 0, 5, null, 5, 10, 10, 10],
278+
y: [0, 5, 10, 0, null, 10, 0, 5, 10],
279+
z: [0, 50, 100, 50, null, 255, 100, 510, 1010]
280+
};
281+
282+
convertColumnXYZ(trace, xa, ya);
283+
284+
expect(trace.x).toEqual([0, 5, 10]);
285+
expect(trace.y).toEqual([0, 5, 10]);
286+
expect(trace.z).toEqual([
287+
[0, 50, 100],
288+
[50, undefined, 510],
289+
[100, 255, 1010]
290+
]);
291+
});
267292
});
268293

269294
describe('heatmap calc', function() {

0 commit comments

Comments
 (0)