density = (data, xBins, colorRamp, min, max) => {
const timeLabel = `${comma(numPoints)} data points`;
console.time(timeLabel);
alloc.reset();
const bins = alloc(Float64Array, xBins).fill(0);
const xs = alloc(Float64Array, data.length);
xs.set(data);
if (min !== undefined && max !== undefined) {
zig.density1dMinMax(bins.byteOffset, bins.length, xs.byteOffset, xs.length, min, max );
} else {
zig.density1d(bins.byteOffset, bins.length, xs.byteOffset, xs.length);
}
const imgData = alloc(Uint8ClampedArray, 4 * bins.length);
const ramp = alloc(Uint8ClampedArray, colorRamp.length);
ramp.set(colorRamp);
zig.binsToImgData(
imgData.byteOffset,
bins.byteOffset,
bins.length,
ramp.byteOffset,
ramp.length / 4
);
image.data.set(imgData);
ctx.putImageData(image, 0, 0);
ctx.canvas.value = bins;
console.timeEnd(timeLabel);
return ctx.canvas;
}