Skip to content

Commit 728a6f4

Browse files
committed
Genericize heatmap xyz variable names
1 parent 620cd43 commit 728a6f4

File tree

3 files changed

+57
-36
lines changed

3 files changed

+57
-36
lines changed

src/traces/heatmap/calc.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var Axes = require('../../plots/cartesian/axes');
1616
var histogram2dCalc = require('../histogram2d/calc');
1717
var colorscaleCalc = require('../../components/colorscale/calc');
1818
var hasColumns = require('./has_columns');
19-
var convertColumnXYZ = require('./convert_column_xyz');
19+
var convertColumnData = require('./convert_column_xyz');
2020
var maxRowLength = require('./max_row_length');
2121
var clean2dArray = require('./clean_2d_array');
2222
var interp2d = require('./interp2d');
@@ -57,7 +57,7 @@ module.exports = function calc(gd, trace) {
5757
z = binned.z;
5858
}
5959
else {
60-
if(hasColumns(trace)) convertColumnXYZ(trace, xa, ya);
60+
if(hasColumns(trace)) convertColumnData(trace, xa, ya, 'x', 'y', ['z']);
6161

6262
x = trace.x ? xa.makeCalcdata(trace, 'x') : [];
6363
y = trace.y ? ya.makeCalcdata(trace, 'y') : [];

src/traces/heatmap/convert_column_xyz.js

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,49 +12,68 @@
1212
var Lib = require('../../lib');
1313
var BADNUM = require('../../constants/numerical').BADNUM;
1414

15+
module.exports = function convertColumnData(trace, ax1, ax2, var1Name, var2Name, arrayVarNames) {
16+
var1Name = var1Name || 'x';
17+
var2Name = var2Name || 'y';
18+
arrayVarNames = arrayVarNames || ['z'];
1519

16-
module.exports = function convertColumnXYZ(trace, xa, ya) {
17-
var xCol = trace.x.slice(),
18-
yCol = trace.y.slice(),
19-
zCol = trace.z,
20+
var col1 = trace[var1Name].slice(),
21+
col2 = trace[var2Name].slice(),
2022
textCol = trace.text,
21-
colLen = Math.min(xCol.length, yCol.length, zCol.length),
23+
colLen = Math.min(col1.length, col2.length),
2224
hasColumnText = (textCol !== undefined && !Array.isArray(textCol[0])),
23-
xcalendar = trace.xcalendar,
24-
ycalendar = trace.ycalendar;
25+
col1Calendar = trace[var1Name + 'calendar'],
26+
col2Calendar = trace[var2Name + 'calendar'];
2527

26-
var i;
28+
var i, j, arrayVar, newArray, arrayVarName;
2729

28-
if(colLen < xCol.length) xCol = xCol.slice(0, colLen);
29-
if(colLen < yCol.length) yCol = yCol.slice(0, colLen);
30+
for(i = 0; i < arrayVarNames.length; i++) {
31+
arrayVar = trace[arrayVarNames[i]];
32+
if(arrayVar) colLen = Math.min(colLen, arrayVar.length);
33+
}
34+
35+
if(colLen < col1.length) col1 = col1.slice(0, colLen);
36+
if(colLen < col2.length) col2 = col2.slice(0, colLen);
3037

3138
for(i = 0; i < colLen; i++) {
32-
xCol[i] = xa.d2c(xCol[i], 0, xcalendar);
33-
yCol[i] = ya.d2c(yCol[i], 0, ycalendar);
39+
col1[i] = ax1.d2c(col1[i], 0, col1Calendar);
40+
col2[i] = ax2.d2c(col2[i], 0, col2Calendar);
3441
}
3542

36-
var xColdv = Lib.distinctVals(xCol),
37-
x = xColdv.vals,
38-
yColdv = Lib.distinctVals(yCol),
39-
y = yColdv.vals,
40-
z = Lib.init2dArray(y.length, x.length);
43+
var col1dv = Lib.distinctVals(col1),
44+
col1vals = col1dv.vals,
45+
col2dv = Lib.distinctVals(col2),
46+
col2vals = col2dv.vals,
47+
newArrays = [];
48+
49+
for(i = 0; i < arrayVarNames.length; i++) {
50+
newArrays[i] = Lib.init2dArray(col2vals.length, col1vals.length);
51+
}
4152

42-
var text;
53+
var i1, i2, text;
4354

44-
if(hasColumnText) text = Lib.init2dArray(y.length, x.length);
55+
if(hasColumnText) text = Lib.init2dArray(col2vals.length, col1vals.length);
4556

4657
for(i = 0; i < colLen; i++) {
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);
58+
if(col1[i] !== BADNUM && col2[i] !== BADNUM) {
59+
i1 = Lib.findBin(col1[i] + col1dv.minDiff / 2, col1vals);
60+
i2 = Lib.findBin(col2[i] + col2dv.minDiff / 2, col2vals);
61+
62+
for(j = 0; j < arrayVarNames.length; j++) {
63+
arrayVarName = arrayVarNames[j];
64+
arrayVar = trace[arrayVarName];
65+
newArray = newArrays[j];
66+
newArray[i2][i1] = arrayVar[i];
67+
}
5068

51-
z[iy][ix] = zCol[i];
52-
if(hasColumnText) text[iy][ix] = textCol[i];
69+
if(hasColumnText) text[i2][i1] = textCol[i];
5370
}
5471
}
5572

56-
trace.x = x;
57-
trace.y = y;
58-
trace.z = z;
73+
trace[var1Name] = col1vals;
74+
trace[var2Name] = col2vals;
75+
for(j = 0; j < arrayVarNames.length; j++) {
76+
trace[arrayVarNames[j]] = newArrays[j];
77+
}
5978
if(hasColumnText) trace.text = text;
6079
};

src/traces/heatmap/xyz_defaults.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,24 @@ var Registry = require('../../registry');
1515
var hasColumns = require('./has_columns');
1616

1717

18-
module.exports = function handleXYZDefaults(traceIn, traceOut, coerce, layout) {
18+
module.exports = function handleXYZDefaults(traceIn, traceOut, coerce, layout, xName, yName) {
1919
var z = coerce('z');
20+
xName = xName || 'x';
21+
yName = yName || 'y';
2022
var x, y;
2123

2224
if(z === undefined || !z.length) return 0;
2325

2426
if(hasColumns(traceIn)) {
25-
x = coerce('x');
26-
y = coerce('y');
27+
x = coerce(xName);
28+
y = coerce(yName);
2729

28-
// column z must be accompanied by 'x' and 'y' arrays
30+
// column z must be accompanied by xName and yName arrays
2931
if(!x || !y) return 0;
3032
}
3133
else {
32-
x = coordDefaults('x', coerce);
33-
y = coordDefaults('y', coerce);
34+
x = coordDefaults(xName, coerce);
35+
y = coordDefaults(yName, coerce);
3436

3537
// TODO put z validation elsewhere
3638
if(!isValidZ(z)) return 0;
@@ -39,7 +41,7 @@ module.exports = function handleXYZDefaults(traceIn, traceOut, coerce, layout) {
3941
}
4042

4143
var handleCalendarDefaults = Registry.getComponentMethod('calendars', 'handleTraceDefaults');
42-
handleCalendarDefaults(traceIn, traceOut, ['x', 'y'], layout);
44+
handleCalendarDefaults(traceIn, traceOut, [xName, yName], layout);
4345

4446
return traceOut.z.length;
4547
};

0 commit comments

Comments
 (0)