UNPKG

@antv/t8

Version:

T8 is a text visualization solution for unstructured data within the AntV technology stack, and it is a declarative T8 markdown syntax that can be used to describe the content of data interpretation reports.

58 lines (54 loc) 2.27 kB
'use strict'; require('../utils/selection.js'); var scales = require('../utils/scales.js'); var paths = require('../utils/paths.js'); var createSvg = require('../utils/createSvg.js'); var data = require('../utils/data.js'); var _const = require('../utils/const.js'); var getElementFontSize = require('../../utils/getElementFontSize.js'); var KDE_BANDWIDTH = 7; // Controls the smoothness of the KDE plot. var TICK_COUNT = 40; // Number of points to sample for the density estimation. /** * * @param container * @param config */ var renderDistribution = function (container, config, paragraphType, themeSeedToken) { var data$1 = config.data; function kernelDensityEstimator(kernel, X) { return function (V) { return X.map(function (x) { return [x, data.mean(V, function (v) { return kernel(x - v); })]; }); }; } function kernelEpanechnikov(k) { return function (v) { v /= k; return Math.abs(v) <= 1 ? (0.75 * (1 - v * v)) / k : 0; }; } var chartSize = getElementFontSize.getElementFontSize(paragraphType, themeSeedToken); var height = chartSize; var width = chartSize * 2; var padding = 1.5; // Clear old SVG container.innerHTML = ''; var valueExtent = data.extent(data$1); if (valueExtent[0] === undefined) { throw new Error('Input data is empty or invalid, cannot calculate value extent.'); } var xScale = scales.scaleLinear(valueExtent, [padding, width - padding]); var kde = kernelDensityEstimator(kernelEpanechnikov(KDE_BANDWIDTH), scales.ticks(valueExtent, TICK_COUNT)); var density = kde(data$1); var maxDensity = data.max(density, function (d) { return d[1]; }); var finalYScale = scales.scaleLinear([0, maxDensity], [height - padding, padding]); var svgD3 = createSvg.createSvg(container, width, height); var pathData = paths.createCurvePath(xScale, finalYScale, density); svgD3 .append('path') .attr('class', 'mypath') .attr('fill', 'none') .attr('stroke', _const.LINE_STROKE_COLOR) .attr('stroke-width', 1) .attr('stroke-linejoin', 'round') .attr('d', pathData); }; exports.renderDistribution = renderDistribution; //# sourceMappingURL=index.js.map