@formant/ava
Version:
A framework for automated visual analytics.
37 lines (36 loc) • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.diffPieSector = void 0;
var utils_1 = require("../../utils");
var constants_1 = require("./constants");
var applyChartTypes = ['pie_chart', 'donut_chart'];
exports.diffPieSector = {
id: 'diff-pie-sector',
type: 'SOFT',
docs: {
lintText: 'The difference between sectors of a pie chart should be large enough.',
},
trigger: function (_a) {
var chartType = _a.chartType;
return applyChartTypes.includes(chartType);
},
validator: function (args) {
var result = 1;
var dataProps = args.dataProps;
if (dataProps) {
var intervalField = dataProps.find(function (field) { return (0, utils_1.hasSubset)(field.levelOfMeasurements, ['Interval']); });
if (intervalField && intervalField.sum && intervalField.rawData) {
var sum = intervalField.sum;
var scale_1 = 1 / sum;
var scaledSamples = intervalField.rawData.map(function (v) { return v * scale_1; });
var scaledProduct = scaledSamples.reduce(function (a, c) { return a * c; });
var count = intervalField.rawData.length;
var maxProduct = Math.pow((1 / count), count);
// Math.abs(maxProduct - Math.abs(scaledProduct)) / maxProduct 这个值 小于 0.5 会被认为有点问题
result = constants_1.MAX_SOFT_RULE_COEFFICIENT * 0.2 * (Math.abs(maxProduct - Math.abs(scaledProduct)) / maxProduct);
}
}
result = result < 1 / constants_1.MAX_SOFT_RULE_COEFFICIENT ? 1 / constants_1.MAX_SOFT_RULE_COEFFICIENT : result;
return result;
},
};