UNPKG

@formant/ava

Version:

A framework for automated visual analytics.

51 lines (50 loc) 2.14 kB
"use strict"; 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; }, };