Differentiate between intensify=xy (the old default) and intensify=y
The intensify= option can now colour the cells based on global min/max
across all columns (=xy) or just the current column (=y). Theoretically the
current row (=x) would also be meaningful, but gviz doesn't support that, so
we won't try to do it right now, and just throw a helpful error instead.
diff --git a/render.js b/render.js
index dcff0cc..73cf9a9 100644
--- a/render.js
+++ b/render.js
@@ -163,21 +163,42 @@
rows: ddata
});
if (options.intensify) {
- var minval = 0, maxval = 0;
+ var minval, maxval;
+ var rowmin = [], rowmax = [];
+ var colmin = [], colmax = [];
for (var coli in grid.types) {
if (grid.types[coli] !== T_NUM) continue;
for (var rowi in grid.data) {
var cell = grid.data[rowi][coli];
- if (cell < minval) minval = cell;
- if (cell > maxval) maxval = cell;
+ if (cell < (minval || 0)) minval = cell;
+ if (cell > (maxval || 0)) maxval = cell;
+ if (cell < (rowmin[rowi] || 0)) rowmin[rowi] = cell;
+ if (cell > (rowmax[rowi] || 0)) rowmax[rowi] = cell;
+ if (cell < (colmin[coli] || 0)) colmin[coli] = cell;
+ if (cell > (colmax[coli] || 0)) colmax[coli] = cell;
}
}
- var formatter = new google.visualization.ColorFormat();
- formatter.addGradientRange(minval - 1, 0, null, '#f88', '#fff');
- formatter.addGradientRange(0, maxval + 1, null, '#fff', '#88f');
for (var coli in grid.types) {
if (grid.types[coli] == T_NUM) {
+ var formatter = new google.visualization.ColorFormat();
+ var mn, mx;
+ if (options.intensify == 'xy') {
+ mn = minval;
+ mx = maxval;
+ } else if (options.intensify == 'y') {
+ console.debug(colmin, colmax);
+ mn = colmin[coli];
+ mx = colmax[coli];
+ } else if (options.intensify == 'x') {
+ throw new Error('sorry, intensify=x not supported yet');
+ } else {
+ throw new Error("unknown intensify= mode '" +
+ options.intensify + "'");
+ }
+ console.debug('coli=' + coli + ' mn=' + mn + ' mx=' + mx);
+ formatter.addGradientRange(mn - 1, 0, null, '#f88', '#fff');
+ formatter.addGradientRange(0, mx + 1, null, '#fff', '#88f');
formatter.format(datatable, parseInt(coli));
}
}
@@ -1220,8 +1241,12 @@
var chartops = args.get('chart');
var t, datatable;
var options = {};
+ var intensify = args.get('intensify');
+ if (intensify == '') {
+ intensify = 'xy';
+ }
var gridoptions = {
- intensify: args.get('intensify') != undefined
+ intensify: intensify
};
enqueue(queue, 'gentable', function(grid, done) {