@formant/ava
Version:
A framework for automated visual analytics.
51 lines (50 loc) • 2.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.limitSeries = void 0;
var utils_1 = require("../../utils");
var utils_2 = require("../utils");
var constants_1 = require("./constants");
function hasSeriesField(dataProps) {
var nominalOrOrdinalFields = dataProps.filter(function (field) {
return (0, utils_1.intersects)(field.levelOfMeasurements, ['Nominal', 'Ordinal']);
});
return nominalOrOrdinalFields.length >= 2;
}
/*
只有 heatmap 能映射两个 维值非常多的 字段,因为对于 其他图表,如柱状图来说,第二个维度字段 就要映射成 颜色了。而颜色不适合映射特别多的维度。
所以,在有 两个 维度字段的时候,在两个维度的维值都很多的情况下,要给 heatmap 加分,给其他图表减分。
*/
exports.limitSeries = {
id: 'limit-series',
type: 'SOFT',
docs: {
lintText: 'Avoid too many values in one series.',
},
trigger: function (_a) {
var dataProps = _a.dataProps;
return hasSeriesField(dataProps);
},
validator: function (args) {
var result = 1;
var dataProps = args.dataProps, chartType = args.chartType;
if (dataProps) {
var nominalOrOrdinalFields = dataProps.filter(function (field) {
return (0, utils_1.intersects)(field.levelOfMeasurements, ['Nominal', 'Ordinal']);
});
if (nominalOrOrdinalFields.length >= 2) {
var sortedFields = nominalOrOrdinalFields.sort(utils_2.compare);
var f = sortedFields[1];
if (f.distinct) {
result = f.distinct > constants_1.MAX_SOFT_RULE_COEFFICIENT ? 1 / constants_1.MAX_SOFT_RULE_COEFFICIENT : 1 / f.distinct;
if (f.distinct > 6 && chartType === 'heatmap') {
result = constants_1.MAX_SOFT_RULE_COEFFICIENT * 0.5;
}
else if (chartType === 'heatmap') {
result = 1;
}
}
}
}
return result;
},
};