@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
JavaScript
;
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