Fast heatmaps for massive time series.
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode
demo
src
.gitignore
.npmignore
LICENSE
Readme.md
package.json
rollup.config.js
screenshot.png
tsconfig.json
yarn.lock

Readme.md

Fast density heatmaps for time series with WebGL

Try the demo at https://domoritz.github.io/line-density.

This implementation renders as many lines a possible into a single framebuffer and computes the sums and normalization entirely on the GPU. The multiple heatmaps are eventually collected into a single output buffer. We can then render the buffer with the tool of our choice (e.g. Vega).

You can use line-density in Observable. Check out https://beta.observablehq.com/@domoritz/line-density.

Installation

This module is available on npm and can be installed with yarn add line-density.

Usage

import density from "line-density";
import ndarray from "ndarray";

const data = ndarray([1, 2, 3, 2, 1, 2], [2, 3]);

const lineDensity = await density(
  // the time series data
  data,
  // x binning
  { start: 0, stop: 3, step: 1 },
  // y binning
  { start: 0, stop: 3, step: 1 }
);

The density function takes an optional canvas as the fourth parameter (for use with https://github.com/Automattic/node-canvas).

Related Repositories

https://github.com/domoritz/line-density-rust for a parallel Rust implementation.

Resources