@thi.ng/viz
Version:
Declarative, functional & multi-format data visualization toolkit based around @thi.ng/hiccup
20 lines (19 loc) • 908 B
JavaScript
import { isFunction } from "@thi.ng/checks/is-function";
import { clamp, inRange } from "@thi.ng/math/interval";
const __resolveData = (data, domain) => isFunction(data) ? data(domain) : data;
const __valueMapper = ({ scale: scaleX }, { scale: scaleY, domain: [dmin, dmax] }, project = (x) => x) => ([x, y]) => project([scaleX(x), scaleY(clamp(y, dmin, dmax))]);
function* processedPoints({ xaxis, yaxis, project }, data, pointOnly = false) {
const mapper = __valueMapper(xaxis, yaxis, project);
const [dmin, dmax] = xaxis.domain;
for (let p of __resolveData(data, xaxis.domain)) {
if (!inRange(p[0], dmin, dmax)) continue;
yield pointOnly ? mapper(p) : [mapper(p), p];
}
}
const defSimplePlotFn = (shape) => (data, opts = {}) => (spec) => [shape, opts.attribs || {}, [...processedPoints(spec, data, true)]];
export {
__resolveData,
__valueMapper,
defSimplePlotFn,
processedPoints
};